Loading...
MySQL 9.5 Reference Manual 9.5의 14.10 Cast Functions and Operators의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Table 14.15 Cast Functions and Operators
| Name | Description | Deprecated |
|---|---|---|
BINARY | 문자열을 바이너리 문자열로 캐스트 | Yes |
CAST() | 값을 특정 타입으로 캐스트 | |
CONVERT() | 값을 특정 타입으로 캐스트 |
Cast 함수와 연산자는 한 데이터 타입에서 다른 데이터 타입으로 값의 변환을 가능하게 합니다.
BINARY exprBINARY 연산자는 표현식을 바이너리 문자열로 변환합니다 (binary 문자 집합과
binary 콜레이션을 가지는 문자열). BINARY의 일반적인 용도는 문자별이 아닌 숫자 바이트 값을 사용하여 바이트 단위로 문자 문자열 비교를 강제하는 것입니다. BINARY 연산자는 또한 비교에서 뒤따르는 공백이 의미를 가지도록 합니다. binary 문자 집합의
binary 콜레이션과 비바이너리 문자 집합의 _bin 콜레이션 간의 차이에 대한 정보는 Section 12.8.5, “The binary Collation Compared to _bin Collations”를 참조하십시오.
BINARY 연산자는 사용 중단(deprecated)되었습니다. 차기 버전의 MySQL에서 제거될 것으로 예상해야 합니다. 대신 CAST(... AS BINARY)를 사용하십시오.
1mysql> SET NAMES utf8mb4 COLLATE utf8mb4_general_ci; 2 -> OK 3mysql> SELECT 'a' = 'A'; 4 -> 1 5mysql> SELECT BINARY 'a' = 'A'; 6 -> 0 7mysql> SELECT 'a' = 'a '; 8 -> 1 9mysql> SELECT BINARY 'a' = 'a '; 10 -> 0
비교에서, BINARY는 전체 연산에 영향을 줍니다. 어느 한 피연산자 앞에 주어져도 결과는 동일합니다.
문자열 표현식을 바이너리 문자열로 변환하려면, 다음 구문들은 서로 동등합니다:
1CONVERT(expr USING BINARY) 2CAST(expr AS BINARY) 3BINARY expr
값이 문자열 리터럴인 경우, _binary 문자 집합 인트로듀서를 사용하여 변환 없이 바이너리 문자열로 지정할 수 있습니다:
1mysql> SELECT 'a' = 'A'; 2 -> 1 3mysql> SELECT _binary 'a' = 'A'; 4 -> 0
인트로듀서에 대한 정보는 Section 12.3.8, “Character Set Introducers”를 참조하십시오.
표현식에서의 BINARY 연산자는 문자 컬럼 정의에서의
BINARY 속성과 효과가 다릅니다. BINARY 속성으로 정의된 문자 컬럼의 경우, MySQL은 테이블 기본 문자 집합과 그 문자 집합의 바이너리(_bin) 콜레이션을 할당합니다. 모든 비바이너리 문자 집합은 _bin 콜레이션을 가집니다. 예를 들어, 테이블 기본 문자 집합이 utf8mb4인 경우, 다음 두 컬럼 정의는 동등합니다:
1CHAR(10) BINARY 2CHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
CHAR,
VARCHAR 또는
TEXT 컬럼 정의에서 CHARACTER SET binary를 사용하면, 컬럼은 해당 바이너리 문자열 데이터 타입으로 취급됩니다. 예를 들어, 다음 정의 쌍은 동일합니다:
1CHAR(10) CHARACTER SET binary 2BINARY(10) 3 4VARCHAR(10) CHARACTER SET binary 5VARBINARY(10) 6 7TEXT CHARACTER SET binary 8BLOB
BINARY가 mysql 클라이언트 내에서 호출되면, 바이너리 문자열은 --binary-as-hex 값에 따라 16진수 표기법을 사용하여 표시됩니다. 이 옵션에 대한 더 많은 정보는
Section 6.5.1, “mysql — The MySQL Command-Line Client”를 참조하십시오.
CAST(timestamp_value AT TIME ZONE timezone_specifier AS DATETIME[(precision)])
timezone_specifier: [INTERVAL]
'+00:00' | 'UTC'
CAST(expr AS type 구문에서,
CAST() 함수는 임의 타입의 표현식을 받아 지정된 타입의 결과 값을 생성합니다. 이 연산은
CONVERT(expr, type)로도 표현할 수 있으며, 이는 동등합니다. _expr_이
NULL이면, CAST()는
NULL을 반환합니다.
허용되는 type 값은 다음과 같습니다:
BINARY[(N)]
VARBINARY 데이터 타입을 가진 문자열을 생성하지만, 표현식
_expr_이 비어 있는 경우(길이 0)에는 결과 타입이 BINARY(0)입니다. 선택적 길이 _N_이 주어지면,
BINARY(N)은 캐스트가 인자의 최대
N 바이트까지만 사용하도록 합니다.
N 바이트보다 짧은 값은 길이가
_N_이 되도록 0x00 바이트로 패딩됩니다. 선택적 길이 _N_이 주어지지 않으면, MySQL은 표현식에서 최대 길이를 계산합니다. 제공되거나 계산된 길이가 내부 임계값보다 크면 결과 타입은
BLOB입니다. 길이가 여전히 너무 길면 결과 타입은 LONGBLOB입니다.
BINARY로 캐스트가 비교에 어떤 영향을 주는지에 대한 설명은 Section 13.3.3, “The BINARY and VARBINARY Types”을 참조하십시오.
CHAR[(N)] [charset_info]
VARCHAR 데이터 타입을 가진 문자열을 생성하지만, 표현식 _expr_이 비어 있는 경우(길이 0)에는 결과 타입이
CHAR(0)입니다. 선택적 길이
_N_이 주어지면,
CHAR(N)은 캐스트가 인자의 최대
N 문자까지만 사용하도록 합니다.
N 문자보다 짧은 값에 대해서는 패딩이 발생하지 않습니다. 선택적 길이 _N_이 주어지지 않으면, MySQL은 표현식에서 최대 길이를 계산합니다. 제공되거나 계산된 길이가 내부 임계값보다 크면 결과 타입은
TEXT입니다. 길이가 여전히 너무 길면 결과 타입은 LONGTEXT입니다.
charset_info 절이 없으면,
CHAR는 기본 문자 집합을 가진 문자열을 생성합니다. 문자 집합을 명시적으로 지정하려면, 다음
charset_info 값들이 허용됩니다:
CHARACTER SET charset_name:
지정된 문자 집합을 가진 문자열을 생성합니다.
ASCII: CHARACTER SET latin1의 축약형입니다.
UNICODE: CHARACTER SET ucs2의 축약형입니다.
모든 경우에, 문자열은 문자 집합의 기본 콜레이션을 가집니다.
DATE
DATE 값을 생성합니다.
DATETIME[(M)]
DATETIME
값을 생성합니다. 선택적 값 _M_이 주어지면, 소수 초 정밀도(fractional seconds precision)를 지정합니다.
DECIMAL[(M[,D])]
DECIMAL 값을 생성합니다.
선택적 값 _M_과
_D_가 주어지면, 각각 최대 자릿수(precision)와 소수점 이하 자릿수(scale)를 지정합니다. _D_가 생략되면 0이 가정됩니다. _M_이 생략되면 10이 가정됩니다.
DOUBLE
DOUBLE 결과를 생성합니다.
FLOAT[(p)]
정밀도 _p_가 지정되지 않으면, FLOAT 타입의 결과를 생성합니다. _p_가 제공되고 0 <=
p <= 24이면, 결과는 FLOAT 타입입니다. 25 <=
p <= 53이면, 결과는 DOUBLE 타입입니다. p < 0 또는
p > 53이면, 오류가 반환됩니다.
JSON
JSON 값을 생성합니다.
JSON과 다른 타입 간의 값 변환 규칙에 대한 자세한 내용은 Comparison and Ordering of JSON Values를 참조하십시오.
NCHAR[(N)]
CHAR와 같지만, 내셔널 문자 집합을 가진 문자열을 생성합니다. Section 12.3.7, “The National Character Set”을 참조하십시오.
CHAR와 달리, NCHAR는 뒤에 오는 문자 집합 정보를 지정하는 것을 허용하지 않습니다.
REAL
REAL 타입 결과를 생성합니다. REAL_AS_FLOAT SQL 모드가 활성화되어 있으면 실제로는 FLOAT이며, 그렇지 않으면 결과 타입은
DOUBLE입니다.
SIGNED [INTEGER]
부호 있는 BIGINT
값을 생성합니다.
spatial_type
CAST() 및
CONVERT()는 특정 공간 타입 조합에 대해 지오메트리 값을 한 공간 타입에서 다른 타입으로 캐스트하는 것을 지원합니다. 자세한 내용은
Cast Operations on Spatial Types를 참조하십시오.
TIME[(M)]
TIME 값을 생성합니다. 선택적 값
_M_이 주어지면, 소수 초 정밀도를 지정합니다.
UNSIGNED [INTEGER]
부호 없는
BIGINT 값을 생성합니다.
YEAR
YEAR 값을 생성합니다.
YEAR로의 변환에는 다음 규칙이 적용됩니다:
1901–2155 범위(포함)의 네 자리 숫자이거나, 이 범위의 네 자리 숫자로 해석될 수 있는 문자열의 경우, 해당하는 YEAR 값을 반환합니다.
한 자리 또는 두 자리 숫자이거나, 그러한 숫자로 해석될 수 있는 문자열의 경우, 다음과 같이 YEAR 값을 반환합니다:
숫자가 1–69 범위(포함)에 있으면 2000을 더한 값을 반환합니다.
숫자가 70–99 범위(포함)에 있으면 1900을 더한 값을 반환합니다.
0으로 평가되는 문자열의 경우, 2000을 반환합니다.
숫자 0의 경우, 0을 반환합니다.
DATE,
DATETIME,
TIMESTAMP 값의 경우, 값의
YEAR 부분을 반환합니다. TIME
값의 경우, 현재 연도를 반환합니다.
TIME 인자의 타입을 지정하지 않으면, 다음과 같이 예상과 다른 결과를 얻을 수 있습니다:
1mysql> SELECT CAST("11:35:00" AS YEAR), CAST(TIME "11:35:00" AS YEAR); 2+--------------------------+-------------------------------+ 3| CAST("11:35:00" AS YEAR) | CAST(TIME "11:35:00" AS YEAR) | 4+--------------------------+-------------------------------+ 5| 2011 | 2021 | 6+--------------------------+-------------------------------+
인자가
DECIMAL,
DOUBLE,
DECIMAL,
REAL 타입이면, 값을 가장 가까운 정수로 반올림한 후, 정수 값에 대한 규칙을 사용하여 YEAR로 캐스트를 시도합니다. 예:
1mysql> SELECT CAST(1944.35 AS YEAR), CAST(1944.50 AS YEAR); 2+-----------------------+-----------------------+ 3| CAST(1944.35 AS YEAR) | CAST(1944.50 AS YEAR) | 4+-----------------------+-----------------------+ 5| 1944 | 1945 | 6+-----------------------+-----------------------+ 7 8mysql> SELECT CAST(66.35 AS YEAR), CAST(66.50 AS YEAR); 9+---------------------+---------------------+ 10| CAST(66.35 AS YEAR) | CAST(66.50 AS YEAR) | 11+---------------------+---------------------+ 12| 2066 | 2067 | 13+---------------------+---------------------+
성공적으로 YEAR로 변환될 수 없는 값에 대해서는
NULL을 반환합니다.
변환 전에 잘려야 하는 비숫자 문자를 포함하는 문자열 값은 다음과 같이 경고를 발생시킵니다:
1mysql> SELECT CAST("1979aaa" AS YEAR); 2+-------------------------+ 3| CAST("1979aaa" AS YEAR) | 4+-------------------------+ 5| 1979 | 6+-------------------------+ 71 row in set, 1 warning (0.00 sec) 8 9mysql> SHOW WARNINGS; 10+---------+------+-------------------------------------------+ 11| Level | Code | Message | 12+---------+------+-------------------------------------------+ 13| Warning | 1292 | Truncated incorrect YEAR value: '1979aaa' | 14+---------+------+-------------------------------------------+
InnoDB는 CREATE INDEX, CREATE TABLE, ALTER TABLE 문장의 일부로 JSON
배열에 멀티값 인덱스를 생성하기 위해 추가 ARRAY 키워드 사용을 허용합니다. ARRAY는 이러한 문장에서 멀티값 인덱스를 생성하는 데 사용될 때만 지원되며, 이 경우 필수입니다. 인덱스가 생성되는 컬럼은 JSON 타입 컬럼이어야 합니다. ARRAY와 함께, AS 키워드 뒤의
_type_은 BINARY, JSON,
YEAR를 제외한 CAST()가 지원하는 임의 타입을 지정할 수 있습니다. 구문 정보와 예제 및 기타 관련 정보는
Multi-Valued Indexes를 참조하십시오.
참고
CAST()와 달리
CONVERT()는 멀티값 인덱스 생성이나 ARRAY 키워드를 지원하지 않습니다.
CAST()는 AT TIMEZONE 연산자를 사용하여
TIMESTAMP 값을 UTC로 간주하여 가져오는 것을 지원합니다. 지원되는 타임존은 UTC뿐이며, 이는 '+00:00' 또는
'UTC'로 지정할 수 있습니다. 이 구문에 의해 지원되는 유일한 반환 타입은 선택적 정밀도 지정자(0–6 범위 포함)를 가진 DATETIME입니다.
타임존 오프셋을 사용하는 TIMESTAMP 값도 지원됩니다.
1mysql> SELECT @@system_time_zone; 2+--------------------+ 3| @@system_time_zone | 4+--------------------+ 5| EDT | 6+--------------------+ 71 row in set (0.00 sec) 8 9mysql> CREATE TABLE tz (c TIMESTAMP); 10Query OK, 0 rows affected (0.41 sec) 11 12mysql> INSERT INTO tz VALUES 13 -> ROW(CURRENT_TIMESTAMP), 14 -> ROW('2020-07-28 14:50:15+1:00'); 15Query OK, 1 row affected (0.08 sec) 16 17mysql> TABLE tz; 18+---------------------+ 19| c | 20+---------------------+ 21| 2020-07-28 09:22:41 | 22| 2020-07-28 09:50:15 | 23+---------------------+ 242 rows in set (0.00 sec) 25 26mysql> SELECT CAST(c AT TIME ZONE '+00:00' AS DATETIME) AS u FROM tz; 27+---------------------+ 28| u | 29+---------------------+ 30| 2020-07-28 13:22:41 | 31| 2020-07-28 13:50:15 | 32+---------------------+ 332 rows in set (0.00 sec) 34 35mysql> SELECT CAST(c AT TIME ZONE 'UTC' AS DATETIME(2)) AS u FROM tz; 36+------------------------+ 37| u | 38+------------------------+ 39| 2020-07-28 13:22:41.00 | 40| 2020-07-28 13:50:15.00 | 41+------------------------+ 422 rows in set (0.00 sec)
이 형태의 CAST()에서 타임존 지정자로 'UTC'를 사용했을 때, 서버가 Unknown or
incorrect time zone: 'UTC'와 같은 오류를 발생시키면, MySQL 타임존 테이블을 설치해야 할 수 있습니다( Populating the Time Zone Tables 참조).
AT TIME ZONE는 ARRAY 키워드를 지원하지 않으며,
CONVERT() 함수에서 지원되지 않습니다.
CONVERT(expr USING transcoding_name)는 표준 SQL 구문입니다. USING이 없는 CONVERT()의 형태는 ODBC 구문입니다. 사용된 구문에 관계없이, _expr_이
NULL이면 함수는
NULL을 반환합니다.
CONVERT(expr USING transcoding_name)는 서로 다른 문자 집합 간에 데이터를 변환합니다. MySQL에서 트랜스코딩 이름은 해당 문자 집합 이름과 동일합니다. 예를 들어, 다음 문장은 기본 문자 집합의 문자열 'abc'를
utf8mb4 문자 집합의 해당 문자열으로 변환합니다:
1SELECT CONVERT('abc' USING utf8mb4);
USING이 없는
CONVERT(expr, type) 구문은 표현식과 결과 타입을 지정하는
type 값을 받아 지정된 타입의 결과 값을 생성합니다. 이 연산은
CAST(expr AS type)로도 표현할 수 있으며, 이는 동등합니다. 자세한 내용은
CAST() 설명을 참조하십시오.
USING 절을 가진 CONVERT()는 문자 집합 간에 데이터를 변환합니다:
1CONVERT(expr USING transcoding_name)
MySQL에서 트랜스코딩 이름은 해당 문자 집합 이름과 동일합니다.
예:
1SELECT CONVERT('test' USING utf8mb4); 2SELECT CONVERT(_latin1'Müller' USING utf8mb4); 3INSERT INTO utf8mb4_table (utf8mb4_column) 4 SELECT CONVERT(latin1_column USING utf8mb4) FROM latin1_table;
문자열을 문자 집합 간에 변환하기 위해, USING 없는
CONVERT(expr, type) 구문이나, 동등한
CAST(expr AS type)를 사용할 수도 있습니다:
1CONVERT(string, CHAR[(N)] CHARACTER SET charset_name) 2CAST(string AS CHAR[(N)] CHARACTER SET charset_name)
예:
1SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4); 2SELECT CAST('test' AS CHAR CHARACTER SET utf8mb4);
위와 같이 CHARACTER SET charset_name을 지정하면, 결과의 문자 집합과 콜레이션은 각각
charset_name 및 그 기본 콜레이션입니다. CHARACTER SET charset_name을 생략하면, 결과의 문자 집합과 콜레이션은 기본 커넥션 문자 집합과 콜레이션을 결정하는
character_set_connection 및
collation_connection 시스템 변수에 의해 정의됩니다(Section 12.4, “Connection Character Sets and Collations” 참조).
COLLATE 절은
CONVERT() 또는
CAST() 호출 내에서는 허용되지 않지만, 함수 결과에 적용할 수는 있습니다. 예를 들어, 다음은 허용됩니다:
1SELECT CONVERT('test' USING utf8mb4) COLLATE utf8mb4_bin; 2SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin; 3SELECT CAST('test' AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin;
하지만 다음은 허용되지 않습니다:
1SELECT CONVERT('test' USING utf8mb4 COLLATE utf8mb4_bin); 2SELECT CONVERT('test', CHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_bin); 3SELECT CAST('test' AS CHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_bin);
문자열 리터럴의 경우 문자 집합을 지정하는 또 다른 방법은 문자 집합 인트로듀서를 사용하는 것입니다. 앞의 예제에서 _latin1과 _latin2는 인트로듀서의 예입니다. CAST(),
CONVERT()와 같은 변환 함수들이 문자열을 한 문자 집합에서 다른 문자 집합으로 변환하는 것과 달리, 인트로듀서는 변환 없이 문자열 리터럴이 특정 문자 집합을 가진 것으로 지정합니다. 자세한 내용은
Section 12.3.8, “Character Set Introducers”를 참조하십시오.
일반적으로, BLOB 값이나 기타 바이너리 문자열은 binary 문자 집합이 대소문자 개념을 가진 콜레이션을 갖지 않기 때문에 대소문자 구분 없이 비교할 수 없습니다. 대소문자를 구분하지 않는 비교를 수행하려면, 먼저 CONVERT() 또는
CAST() 함수를 사용하여 값을 비바이너리 문자열로 변환합니다. 결과 문자열의 비교는 그 콜레이션을 사용합니다. 예를 들어, 변환 결과 콜레이션이 대소문자를 구분하지 않으면,
LIKE 연산도 대소문자를 구분하지 않습니다. 기본 utf8mb4 콜레이션
(utf8mb4_0900_ai_ci)이 대소문자를 구분하지 않기 때문에, 다음 연산이 그렇습니다:
1SELECT 'A' LIKE CONVERT(blob_col USING utf8mb4) 2 FROM tbl_name;
변환된 문자열에 대해 특정 콜레이션을 지정하려면, CONVERT() 호출 뒤에 COLLATE 절을 사용합니다:
1SELECT 'A' LIKE CONVERT(blob_col USING utf8mb4) COLLATE utf8mb4_unicode_ci 2 FROM tbl_name;
다른 문자 집합을 사용하려면, 앞선 문장에서
utf8mb4 대신 그 이름을 대체하고 (다른 콜레이션을 사용하기 위해서도 마찬가지 방식으로) 사용하면 됩니다.
CONVERT()와
CAST()는 보다 일반적으로 서로 다른 문자 집합으로 표현된 문자열을 비교하는 데 사용할 수 있습니다. 예를 들어, 다음 문자열 비교는 서로 다른 문자 집합을 가지므로 오류가 발생합니다:
1mysql> SET @s1 = _latin1 'abc', @s2 = _latin2 'abc'; 2mysql> SELECT @s1 = @s2; 3ERROR 1267 (HY000): Illegal mix of collations (latin1_swedish_ci,IMPLICIT) 4and (latin2_general_ci,IMPLICIT) for operation '='
문자열 중 하나를 다른 것과 호환되는 문자 집합으로 변환하면, 오류 없이 비교가 가능해집니다:
1mysql> SELECT @s1 = CONVERT(@s2 USING latin1); 2+---------------------------------+ 3| @s1 = CONVERT(@s2 USING latin1) | 4+---------------------------------+ 5| 1 | 6+---------------------------------+
문자 집합 변환은 바이너리 문자열에 대한 대소문자 변환 이전에도 유용합니다.
LOWER()와
UPPER()는 대소문자 개념이 적용되지 않으므로 바이너리 문자열에 직접 적용하면 효과가 없습니다. 바이너리 문자열의 대소문자 변환을 수행하려면, 먼저 문자열에 저장된 데이터에 적합한 문자 집합을 사용하여 비바이너리 문자열로 변환합니다:
1mysql> SET @str = BINARY 'New York'; 2mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4)); 3+-------------+------------------------------------+ 4| LOWER(@str) | LOWER(CONVERT(@str USING utf8mb4)) | 5+-------------+------------------------------------+ 6| New York | new york | 7+-------------+------------------------------------+
BINARY,
CAST(),
CONVERT()를 인덱스가 있는 컬럼에 적용하면, MySQL이 인덱스를 효율적으로 사용하지 못할 수 있다는 점을 유의하십시오.
CAST()와
CONVERT()는 특정 공간 타입 조합에 대해 지오메트리 값을 한 공간 타입에서 다른 타입으로 캐스트하는 것을 지원합니다. 다음 목록은 허용되는 타입 조합을 보여줍니다. 여기서 “MySQL extension”은 SQL/MM standard에서 정의된 것 외에 MySQL에서 구현된 캐스트를 나타냅니다:
Point에서 다음으로:
MultiPoint
GeometryCollection
LineString에서 다음으로:
Polygon (MySQL extension)
MultiPoint (MySQL extension)
MultiLineString
GeometryCollection
Polygon에서 다음으로:
LineString (MySQL extension)
MultiLineString (MySQL extension)
MultiPolygon
GeometryCollection
MultiPoint에서 다음으로:
Point
LineString (MySQL extension)
GeometryCollection
MultiLineString에서 다음으로:
LineString
Polygon (MySQL extension)
MultiPolygon (MySQL extension)
GeometryCollection
MultiPolygon에서 다음으로:
Polygon
MultiLineString (MySQL extension)
GeometryCollection
GeometryCollection에서 다음으로:
Point
LineString
Polygon
MultiPoint
MultiLineString
MultiPolygon
공간 캐스트에서 GeometryCollection과
GeomCollection은 동일한 결과 타입에 대한 동의어입니다.
일부 조건은 결과 타입에 상관없이 모든 공간 타입 캐스트에 적용되며, 일부 조건은 결과가 특정 공간 타입을 가져야 할 때에만 적용됩니다. “well-formed geometry”와 같은 용어에 대한 정보는 Section 13.4.4, “Geometry Well-Formedness and Validity”를 참조하십시오.
다음 조건은 결과 타입과 상관없이 모든 공간 캐스트에 적용됩니다:
캐스트 결과는 캐스트 대상 표현식과 동일한 SRS에 있습니다.
공간 타입 간 캐스트는 좌표 값이나 순서를 변경하지 않습니다.
캐스트 대상 표현식이 NULL이면, 함수 결과는 NULL입니다.
JSON_VALUE() 함수를 사용하여 공간 타입을 지정하는
RETURNING 절로 공간 타입으로 캐스트하는 것은 허용되지 않습니다.
공간 타입의 ARRAY로 캐스트하는 것은 허용되지 않습니다.
공간 타입 조합이 허용되지만 캐스트 대상 표현식이 구문적으로 well-formed geometry가 아니면,
ER_GIS_INVALID_DATA 오류가 발생합니다.
공간 타입 조합이 허용되지만 캐스트 대상 표현식이 정의되지 않은 공간 참조 시스템(SRS)의 구문적으로 well-formed geometry인 경우,
ER_SRS_NOT_FOUND 오류가 발생합니다.
캐스트 대상 표현식이 지리적 SRS를 가지지만 경도 또는 위도가 범위를 벗어난 경우, 오류가 발생합니다:
경도 값이 범위 (−180, 180]에 있지 않으면,
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
오류가 발생합니다.
위도 값이 범위 [−90, 90]에 있지 않으면,
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
오류가 발생합니다.
표시된 범위는 도 단위입니다. SRS가 다른 단위를 사용하면, 해당 단위의 값으로 범위를 사용합니다. 정확한 범위 제한은 부동소수점 산술로 인해 약간 편차가 있습니다.
캐스트 결과 타입이 Point인 경우, 다음 조건이 적용됩니다:
캐스트 대상 표현식이 타입이 Point인 well-formed geometry이면, 함수 결과는 해당
Point입니다.
캐스트 대상 표현식이 single Point를 포함하는 타입이
MultiPoint인 well-formed geometry이면, 함수 결과는 해당 Point입니다. 표현식이 두 개 이상의
Point를 포함하면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이 single Point만 포함하는 타입이
GeometryCollection인 well-formed geometry이면, 함수 결과는 해당 Point입니다. 표현식이 비어 있거나, 두 개 이상의
Point를 포함하거나, 다른 지오메트리 타입을 포함하면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이
Point,
MultiPoint,
GeometryCollection이 아닌 타입의 well-formed geometry이면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 결과 타입이 LineString인 경우, 다음 조건이 적용됩니다:
캐스트 대상 표현식이 타입이
LineString인 well-formed geometry이면, 함수 결과는 해당
LineString입니다.
캐스트 대상 표현식이 inner ring이 없는 타입이
Polygon인 well-formed geometry이면, 함수 결과는 outer ring의 포인트를 동일한 순서로 포함하는
LineString입니다. 표현식에 inner ring이 있으면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이 적어도 두 개의 포인트를 포함하는 타입이
MultiPoint인 well-formed geometry이면, 함수 결과는 표현식에 나타나는 순서대로
MultiPoint의 포인트를 포함하는
LineString입니다. 표현식에 Point가 하나뿐이면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이 single
LineString을 포함하는 타입이
MultiLineString인 well-formed geometry이면, 함수 결과는 해당
LineString입니다. 표현식이 두 개 이상의
LineString을 포함하면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이 single
LineString만 포함하는 타입이
GeometryCollection인 well-formed geometry이면, 함수 결과는 해당
LineString입니다. 표현식이 비어 있거나, 두 개 이상의
LineString을 포함하거나, 다른 지오메트리 타입을 포함하면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이
LineString,
Polygon, MultiPoint,
MultiLineString,
GeometryCollection 이외 타입의 well-formed geometry이면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 결과 타입이 Polygon인 경우, 다음 조건이 적용됩니다:
캐스트 대상 표현식이 링(즉, 시작점과 끝점이 같은 경우)인 타입이
LineString인 well-formed geometry이면, 함수 결과는 LineString의 포인트를 동일한 순서로 outer ring으로 사용하는 Polygon입니다. 표현식이 링이 아니면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다. 링이 올바른 순서가 아닌 경우(외부 링은 반시계 방향이어야 함),
ER_INVALID_CAST_POLYGON_RING_DIRECTION
오류가 발생합니다.
캐스트 대상 표현식이 타입이
Polygon인 well-formed geometry이면, 함수 결과는 해당
Polygon입니다.
캐스트 대상 표현식이 모든 요소가 링인 타입이
MultiLineString인 well-formed geometry이면, 함수 결과는 첫 번째
LineString을 outer ring으로, 나머지
LineString 값을 inner ring으로 하는 Polygon입니다. 표현식의 요소 중 하나라도 링이 아니면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다. 링 중 어느 하나라도 올바른 순서가 아닌 경우(외부 링은 반시계 방향, 내부 링은 시계 방향이어야 함),
ER_INVALID_CAST_POLYGON_RING_DIRECTION
오류가 발생합니다.
캐스트 대상 표현식이 single
Polygon을 포함하는 타입이
MultiPolygon인 well-formed geometry이면, 함수 결과는 해당
Polygon입니다. 표현식이 두 개 이상의
Polygon을 포함하면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이 single
Polygon만 포함하는 타입이
GeometryCollection인 well-formed geometry이면, 함수 결과는 해당
Polygon입니다. 표현식이 비어 있거나, 두 개 이상의
Polygon을 포함하거나, 다른 지오메트리 타입을 포함하면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이
LineString,
Polygon,
MultiLineString,
MultiPolygon,
GeometryCollection 이외 타입의 well-formed geometry이면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 결과 타입이 MultiPoint인 경우, 다음 조건이 적용됩니다:
캐스트 대상 표현식이 타입이
Point인 well-formed geometry이면, 함수 결과는 해당
Point를 단일 요소로 포함하는
MultiPoint입니다.
캐스트 대상 표현식이 타입이
LineString인 well-formed geometry이면, 함수 결과는 LineString의 포인트를 동일한 순서로 포함하는
MultiPoint입니다.
캐스트 대상 표현식이 타입이
MultiPoint인 well-formed geometry이면, 함수 결과는 해당
MultiPoint입니다.
캐스트 대상 표현식이 포인트만 포함하는 타입이
GeometryCollection인 well-formed geometry이면, 함수 결과는 해당 포인트를 포함하는
MultiPoint입니다. GeometryCollection이 비어 있거나 다른 지오메트리 타입을 포함하면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이
Point,
LineString,
MultiPoint,
GeometryCollection 이외 타입의 well-formed geometry이면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 결과 타입이 MultiLineString인 경우, 다음 조건이 적용됩니다:
캐스트 대상 표현식이 타입이
LineString인 well-formed geometry이면, 함수 결과는 해당
LineString을 단일 요소로 포함하는
MultiLineString입니다.
캐스트 대상 표현식이 타입이
Polygon인 well-formed geometry이면, 함수 결과는 Polygon의 outer ring을 첫 번째 요소로, inner ring을 표현식에 나타나는 순서대로 추가 요소로 포함하는
MultiLineString입니다.
캐스트 대상 표현식이 타입이
MultiLineString인 well-formed geometry이면, 함수 결과는 해당
MultiLineString입니다.
캐스트 대상 표현식이 inner ring이 없는 폴리곤만 포함하는 타입이
MultiPolygon인 well-formed geometry이면, 함수 결과는 표현식에 나타나는 순서대로 폴리곤 링을 포함하는
MultiLineString입니다. 표현식에 inner ring이 있는 폴리곤이 포함되면,
ER_WRONG_PARAMETERS_TO_STORED_FCT
오류가 발생합니다.
캐스트 대상 표현식이 linestring만 포함하는 타입이
GeometryCollection인 well-formed geometry이면, 함수 결과는 해당 linestring을 포함하는
MultiLineString입니다. 표현식이 비어 있거나 다른 지오메트리 타입을 포함하면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이
LineString,
Polygon,
MultiLineString,
MultiPolygon,
GeometryCollection 이외 타입의 well-formed geometry이면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 결과 타입이 MultiPolygon인 경우, 다음 조건이 적용됩니다:
캐스트 대상 표현식이 타입이
Polygon인 well-formed geometry이면, 함수 결과는 해당
Polygon을 단일 요소로 포함하는
MultiPolygon입니다.
캐스트 대상 표현식이 모든 요소가 링인 타입이
MultiLineString인 well-formed geometry이면, 함수 결과는 표현식의 각 요소에 대해 outer ring만 가진 Polygon을 포함하는
MultiPolygon입니다. 요소 중 하나라도 링이 아니면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다. 링 중 어느 하나라도 올바른 순서가 아닌 경우(외부 링은 반시계 방향이어야 함),
ER_INVALID_CAST_POLYGON_RING_DIRECTION
오류가 발생합니다.
캐스트 대상 표현식이 타입이
MultiPolygon인 well-formed geometry이면, 함수 결과는 해당
MultiPolygon입니다.
캐스트 대상 표현식이 폴리곤만 포함하는 타입이
GeometryCollection인 well-formed geometry이면, 함수 결과는 해당 폴리곤을 포함하는
MultiPolygon입니다. 표현식이 비어 있거나 다른 지오메트리 타입을 포함하면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 대상 표현식이
Polygon,
MultiLineString,
MultiPolygon,
GeometryCollection 이외 타입의 well-formed geometry이면,
ER_INVALID_CAST_TO_GEOMETRY
오류가 발생합니다.
캐스트 결과 타입이
GeometryCollection인 경우, 다음 조건이 적용됩니다:
GeometryCollection과
GeomCollection은 동일한 결과 타입에 대한 동의어입니다.
캐스트 대상 표현식이 타입이
Point인 well-formed geometry이면, 함수 결과는 해당
Point를 단일 요소로 포함하는
GeometryCollection입니다.
캐스트 대상 표현식이 타입이
LineString인 well-formed geometry이면, 함수 결과는 해당
LineString을 단일 요소로 포함하는
GeometryCollection입니다.
캐스트 대상 표현식이 타입이
Polygon인 well-formed geometry이면, 함수 결과는 해당
Polygon을 단일 요소로 포함하는
GeometryCollection입니다.
캐스트 대상 표현식이 타입이
MultiPoint인 well-formed geometry이면, 함수 결과는 표현식에 나타나는 순서대로 포인트를 포함하는
GeometryCollection입니다.
캐스트 대상 표현식이 타입이
MultiLineString인 well-formed geometry이면, 함수 결과는 표현식에 나타나는 순서대로 linestring을 포함하는
GeometryCollection입니다.
캐스트 대상 표현식이 타입이
MultiPolygon인 well-formed geometry이면, 함수 결과는 표현식에 나타나는 순서대로 MultiPolygon의 요소를 포함하는
GeometryCollection입니다.
캐스트 대상 표현식이 타입이
GeometryCollection인 well-formed geometry이면, 함수 결과는 해당
GeometryCollection입니다.
캐스트 함수는 CREATE TABLE ... SELECT 문장에서 특정 타입의 컬럼을 생성하는 데 유용합니다:
1mysql> CREATE TABLE new_table SELECT CAST('2000-01-01' AS DATE) AS c1; 2mysql> SHOW CREATE TABLE new_table\G 3*************************** 1. row *************************** 4 Table: new_table 5Create Table: CREATE TABLE `new_table` ( 6 `c1` date DEFAULT NULL 7) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
캐스트 함수는 ENUM 컬럼을 사전식(lexical) 순서로 정렬하는 데 유용합니다. 일반적으로, ENUM 컬럼의 정렬은 내부 숫자 값으로 수행됩니다. 값을
CHAR로 캐스트하면 사전식 정렬이 됩니다:
1SELECT enum_col FROM tbl_name 2 ORDER BY CAST(enum_col AS CHAR);
CAST()는 또한
CONCAT('Date: ',CAST(NOW() AS DATE))와 같은 더 복잡한 표현식의 일부로 사용할 때 결과를 변경합니다.
시간값(temporal 값)에 대해서는 서로 다른 포맷으로 데이터를 추출하기 위해
CAST()를 사용할 필요는 거의 없습니다. 대신
EXTRACT(),
DATE_FORMAT(),
TIME_FORMAT()과 같은 함수를 사용하십시오.
Section 14.7, “Date and Time Functions”를 참조하십시오.
문자열을 숫자로 캐스트하기 위해서는, 일반적으로 숫자 컨텍스트에서 문자열 값을 사용하는 것으로 충분합니다:
1mysql> SELECT 1+'1'; 2 -> 2
이는 기본적으로 바이너리 문자열인 16진수 및 비트 리터럴에도 해당됩니다:
1mysql> SELECT X'41', X'41'+0; 2 -> 'A', 65 3mysql> SELECT b'1100001', b'1100001'+0; 4 -> 'a', 97
산술 연산에서 사용된 문자열은 표현식 평가 중에 부동소수점 숫자로 변환됩니다.
문자열 컨텍스트에서 사용된 숫자는 문자열로 변환됩니다:
1mysql> SELECT CONCAT('hello you ',2); 2 -> 'hello you 2'
숫자의 문자열로의 암묵적 변환에 대한 정보는 Section 14.3, “Type Conversion in Expression Evaluation”을 참조하십시오.
MySQL은 signed 및 unsigned 64비트 값으로 산술을 지원합니다. 한 피연산자가 unsigned 정수인 숫자 연산자(예:
+ 또는
-)의 결과는 기본적으로 unsigned입니다(Section 14.6.1, “Arithmetic Operators” 참조). 이를 재정의하려면, SIGNED 또는
UNSIGNED 캐스트 연산자를 사용하여 값을 각각 signed 또는 unsigned 64비트 정수로 캐스트하십시오.
1mysql> SELECT 1 - 2; 2 -> -1 3mysql> SELECT CAST(1 - 2 AS UNSIGNED); 4 -> 18446744073709551615 5mysql> SELECT CAST(CAST(1 - 2 AS UNSIGNED) AS SIGNED); 6 -> -1
피연산자 중 하나가 부동소수점 값이면, 결과는 부동소수점 값이며 앞선 규칙의 영향을 받지 않습니다. (이 컨텍스트에서
DECIMAL 컬럼 값은 부동소수점 값으로 간주됩니다.)
1mysql> SELECT CAST(1 AS UNSIGNED) - 2.0; 2 -> -1.0
SQL 모드는 변환 연산의 결과에 영향을 줍니다(Section 7.1.11, “Server SQL Modes” 참조). 예:
“zero” 날짜 문자열을 날짜로 변환할 때,
NO_ZERO_DATE SQL 모드가 활성화된 경우
CONVERT()와
CAST()는
NULL을 반환하고 경고를 생성합니다.
정수 뺄셈의 경우,
NO_UNSIGNED_SUBTRACTION
SQL 모드가 활성화되어 있으면, 뺄셈 결과는 피연산자 중 하나가 unsigned이더라도 signed입니다.
14.9.9 MeCab Full-Text Parser Plugin
14.11 XML Functions