카테고리:

문자열 및 이진 함수

COLLATE

원래 collation_specification 속성 대신 지정된 collation_specification 속성을 사용하여 원래 문자열의 복사본을 반환합니다.

이 복사본은 새 collation_specification 을 사용하는 후속 문자열 비교에 사용할 수 있습니다.

구문

COLLATE 함수는 일반 함수로서 호출할 수 있습니다.

COLLATE(<string_expression>, '<collation_specification>')
Copy

COLLATE 함수는 INFIX 연산자인 것처럼 사용할 수 있습니다.

<string_expression> COLLATE '<collation_specification>'
Copy

인자

string_expression

복사본을 만들 문자열입니다.

collation_specification

이는 문자열의 복사본과 함께 저장할 데이터 정렬을 지정합니다. 데이터 정렬 지정자에 대한 자세한 내용은 데이터 정렬 사양 을 참조하십시오.

반환

원래 collation_specification 대신 지정된 collation_specification 속성을 사용하여 원래 문자열의 복사본을 반환합니다.

사용법 노트

VARCHAR 에는 해당 VARCHAR 를 다른 VARCHAR 와 비교할 때 사용할 데이터 정렬 지정자를 보유하는 속성이 포함되어 있습니다. COLLATE 함수는 문자열을 복사하지만, 원래 사양이 아닌 새 데이터 정렬 사양을 복사본에 넣습니다. 문자열 자체는 변경되지 않습니다. 문자열과 연결된 데이터 정렬 지정자만 변경됩니다.

COLLATE 가 중위 연산자로 사용되는 경우, collation_specification 은 일반 식이 아닌 상수 문자열이어야 합니다.

다음 예는 COLLATE 함수를 호출하는 경우, 다른 데이터 정렬 사양을 가진 문자열 복사본이 반환됨을 보여줍니다.

테이블을 만들고 행을 삽입합니다. 삽입된 행에 있는 값의 데이터 정렬 사양은 ‘sp’(스페인어)입니다.

CREATE TABLE collation1 (v VARCHAR COLLATE 'sp');
INSERT INTO collation1 (v) VALUES ('ñ');
Copy

이는 COLLATE 함수가 문자열을 변경하지 않는다는 것을 보여줍니다. 첫 번째 열의 원래 문자열이 소문자인 것처럼 세 번째 열의 복사된 문자열은 소문자입니다. 그러나 COLLATE 에서 반환된 값의 데이터 정렬 사양이 ‘sp’에서 ‘sp-upper’로 변경되었습니다. 이는 네 번째 열에서 볼 수 있습니다.

SELECT v,
       COLLATION(v),
       COLLATE(v, 'sp-upper'),
       COLLATION(COLLATE(v, 'sp-upper'))
    FROM collation1;
+---+--------------+------------------------+-----------------------------------+
| V | COLLATION(V) | COLLATE(V, 'SP-UPPER') | COLLATION(COLLATE(V, 'SP-UPPER')) |
|---+--------------+------------------------+-----------------------------------|
| ñ | sp           | ñ                      | sp-upper                          |
+---+--------------+------------------------+-----------------------------------+
Copy

이 쿼리는 COLLATE 에서 반환된 값이 여전히 소문자 문자열이지만, 해당 문자열을 다른 문자열과 비교할 때 ‘상위’ 데이터 정렬 지정자가 사용됨을 보여줍니다.

SELECT v,
       v = 'ñ' AS "COMPARISON TO LOWER CASE",
       v = 'Ñ' AS "COMPARISON TO UPPER CASE",
       COLLATE(v, 'sp-upper'),
       COLLATE(v, 'sp-upper') = 'Ñ'
    FROM collation1;
+---+--------------------------+--------------------------+------------------------+------------------------------+
| V | COMPARISON TO LOWER CASE | COMPARISON TO UPPER CASE | COLLATE(V, 'SP-UPPER') | COLLATE(V, 'SP-UPPER') = 'Ñ' |
|---+--------------------------+--------------------------+------------------------+------------------------------|
| ñ | True                     | False                    | ñ                      | True                         |
+---+--------------------------+--------------------------+------------------------+------------------------------+
Copy

이 명령은 독일어(Deutsch) 데이터 정렬을 사용하여 결과를 정렬합니다.

SELECT *
    FROM t1
    ORDER BY COLLATE(col1 , 'de');
Copy

다음 두 쿼리는 동일한 결과를 반환합니다. 첫 번째는 COLLATE 를 함수로 사용하고, 두 번째는 COLLATE 를 중위 연산자로 사용합니다.

SELECT spanish_phrase FROM collation_demo 
  ORDER BY COLLATE(spanish_phrase, 'utf8');
Copy
SELECT spanish_phrase FROM collation_demo 
  ORDER BY spanish_phrase COLLATE 'utf8';
Copy