SQL 함수: upper, lower 또는 trim 데이터 정렬 지정자가 있는 열 전달(보류 중)

주의

이 동작 변경 사항은 2024_02 번들에 있습니다.

번들의 현재 상태는 번들 기록 섹션을 참조하십시오.

upperlower 데이터 정렬 지정자 는 문자열을 비교하기 전에 문자열을 각각 대문자 또는 소문자로 변환합니다. trim 데이터 정렬 지정자는 문자열을 비교하기 전에 선행 공백과 후행 공백을 제거합니다.

이러한 지정자가 포함된 열을 일부 SQL 함수에 전달하는 경우 동작이 다음과 같이 변경됩니다.

변경 전:

LIKE 함수는 upper, lowertrim 지정자를 무시하므로, 대/소문자를 구분하여 비교합니다.

또한 다음 함수는 upper, lowertrim 지정자가 있는 열을 지원하지 않습니다.

upper, lower 또는 trim 지정자가 포함된 열을 이러한 함수에 전달하면 컴파일 오류가 발생합니다.

변경 후:

LIKE 함수는 upper, lowertrim 지정자를 따르므로, 대/소문자를 구분하지 않고 비교합니다.

결과적으로, LIKE 함수를 사용하는 쿼리는 추가 행을 반환할 수 있습니다(아래 예 참조).

LIKE 함수는 로캘 지정자와의 조합을 지원하지 않습니다(예: en-upper).

또한 다음 함수는 이제 upper, lowertrim 지정자가 있는 열을 지원합니다.

  • LIKE 함수의 베리언트:

    • LIKE ALL

    • LIKE ANY

    • ILIKE ANY

  • CONTAINS

  • ENDSWITH

  • POSITION

  • REPLACE

  • SPLIT

  • SPLIT_PART

  • STARTSWITH

변경 사항이 LIKE 함수에 미치는 효과의 예

위에서 설명한 대로, 열에 upper, lower 또는 trim 지정자가 있는 경우 LIKE 함수를 사용한 쿼리는 추가 행을 반환할 수 있습니다. 예를 들어, 테이블에 lower 지정자가 있는 열이 있다고 가정합니다. 테이블의 텍스트가 대/소문자가 다르다고 가정해 보겠습니다.

CREATE OR REPLACE TABLE collated_like (
  col_a VARCHAR,
  col_b VARCHAR COLLATE 'lower'
);

INSERT INTO collated_like VALUES ('abc', 'abc'), ('ABC','ABC');
Copy

동작이 변경되기 전에 LIKE 함수를 사용하는 다음 쿼리는 각각 'abc' 값이 있는 행을 한 개 반환합니다.

SELECT * FROM collated_like WHERE col_a LIKE '%b%';

SELECT * FROM collated_like WHERE col_a COLLATE 'lower' LIKE '%b%';

SELECT * FROM collated_like WHERE col_b LIKE '%b%';
Copy
+-------+-------+
| COL_A | COL_B |
|-------+-------|
| abc   | abc   |
+-------+-------+

동작 변경 후에도 LIKE 함수와 함께 lower 사양 열을 사용하지 않는 쿼리는 여전히 한 개의 행을 반환합니다.

SELECT * FROM collated_like WHERE col_a LIKE '%b%';
Copy
+-------+-------+
| COL_A | COL_B |
|-------+-------|
| abc   | abc   |
+-------+-------+

그러나 COLLATE 함수를 사용하여 lower 를 지정하는 쿼리와 lower 사양이 포함된 열을 LIKE 함수에 전달하는 쿼리는 다음 두 개의 행을 반환합니다.

SELECT * FROM collated_like WHERE col_a COLLATE 'lower' LIKE '%b%';

SELECT * FROM collated_like WHERE col_b LIKE '%b%';
Copy
+-------+-------+
| COL_A | COL_B |
|-------+-------|
| abc   | abc   |
| ABC   | ABC   |
+-------+-------+

이는 대략 ILIKE 와 같습니다. 이러한 쿼리가 변경될 것으로 예상되는지 확인하려면 해당 쿼리에서 LIKE를 ILIKE로 바꾸면 됩니다.

변경 전 동작 유지하기

열에서 upper, lower 또는 trim 사양을 사용하고 변경 전 동작을 유지하려는 경우 빈 사양과 함께 COLLATE 함수를 사용하여 열과 관련된 upper, lower 또는 trim 사양을 사용하면 안 됨을 나타낼 수 있습니다.

SELECT * FROM collated_like WHERE col_b COLLATE '' LIKE '%b%';
Copy

참고

LIKE 함수와 함께 이 접근 방식을 사용하는 경우 제목과 패턴 모두에 데이터 정렬 사양이 적용되지 않았는지 확인하십시오.

참조: 1535