SQL 함수: upper
, lower
또는 trim
데이터 정렬 지정자가 있는 열 전달(보류 중)¶
upper
및 lower
데이터 정렬 지정자 는 문자열을 비교하기 전에 문자열을 각각 대문자 또는 소문자로 변환합니다. trim
데이터 정렬 지정자는 문자열을 비교하기 전에 선행 공백과 후행 공백을 제거합니다.
이러한 지정자가 포함된 열을 일부 SQL 함수에 전달하는 경우 동작이 다음과 같이 변경됩니다.
- 변경 전:
LIKE 함수는
upper
,lower
및trim
지정자를 무시하므로, 대/소문자를 구분하여 비교합니다.또한 다음 함수는
upper
,lower
및trim
지정자가 있는 열을 지원하지 않습니다.LIKE 함수의 베리언트:
upper
,lower
또는trim
지정자가 포함된 열을 이러한 함수에 전달하면 컴파일 오류가 발생합니다.- 변경 후:
LIKE 함수는
upper
,lower
및trim
지정자를 따르므로, 대/소문자를 구분하지 않고 비교합니다.결과적으로, LIKE 함수를 사용하는 쿼리는 추가 행을 반환할 수 있습니다(아래 예 참조).
LIKE 함수는 로캘 지정자와의 조합을 지원하지 않습니다(예:
en-upper
).또한 다음 함수는 이제
upper
,lower
및trim
지정자가 있는 열을 지원합니다.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');
동작이 변경되기 전에 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%';
+-------+-------+
| COL_A | COL_B |
|-------+-------|
| abc | abc |
+-------+-------+
동작 변경 후에도 LIKE 함수와 함께 lower
사양 열을 사용하지 않는 쿼리는 여전히 한 개의 행을 반환합니다.
SELECT * FROM collated_like WHERE col_a LIKE '%b%';
+-------+-------+
| 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%';
+-------+-------+
| 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%';
참고
LIKE 함수와 함께 이 접근 방식을 사용하는 경우 제목과 패턴 모두에 데이터 정렬 사양이 적용되지 않았는지 확인하십시오.
참조: 1535