이전 글에서 명시적 유형 변환에 사용되는 CAST 함수에 대해 언급했습니다. 암시적 유형 변환을 피하면 많은 이점이 있습니다. 사실 여기에는 아직 정리해야 할 세부사항이 많이 있습니다. 이번 글에서는 MySQL 명시적 유형 변환에 대한 기본 지식을 주로 소개하고, 예제를 통해 분석 결과를 함께 배워보자.
먼저 다음 변환을 살펴보겠습니다.
mysql> SELECT CAST('2017-12-14' AS DATE); +----------------------------+ | CAST('2017-12-14' AS DATE) | +----------------------------+ | 2017-12-14 | +----------------------------+ 1 row in set (0.00 sec)
그중에는:
2017-12-14는 변환할 데이터입니다.
DATE는 변환된 유형입니다.
표준 구문은 다음과 같습니다:
CAST(expr AS type)
여기서 주목해야 할 점은 타입 타입이 모든 데이터 타입을 지원하는 것이 아니라 특정 데이터 타입을 지원한다는 점인데, 이는 오늘 글에서도 중점적으로 다루고 있다. (저는 이런 손실을 입었습니다. 모든 데이터 유형이 지원되는 것을 당연하게 여겼으나 뺨을 맞았습니다.)
지원되지 않는 오류:
mysql> SELECT CAST('1024' AS int); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int)' at line 1
지원되는 유형
다음은 CAST 함수가 지원하는 데이터 유형 목록입니다.
를 입력하세요 | 비고 |
---|---|
날짜 | YYYY-MM-DD |
날짜시간 | YYYY-MM-DD HH:mm:ss |
시간 | HH:mm:ss |
십진수 | 일반적으로 소수점 이하 자릿수와 함께 사용됩니다 |
챠르 | 고정 길이 문자열 |
NCHAR | 유형은 CHAR | 과 동일합니다.
서명됨 | 부호 있는 64비트 정수 |
서명되지 않음 | 부호 없는 64비트 정수 |
바이너리 | 바이너리 문자열 |
JSON | MySQL 5.7.8 이상 |
참고:
지원되는 DATE 범위는 1000-01-01 ~ 9999-12-31입니다(실험 버전은:)
999-01-01인 경우 결과는 0999-01-01이 됩니다.
01-01-01이면 2001-01-01이 됩니다.
rreeemysql> select cast('999-11-11' as DATE); +---------------------------+ | cast('999-11-11' as DATE) | +---------------------------+ | 0999-11-11 | +---------------------------+ 1 row in set (0.00 sec)
mysql> select cast('01-11-11' as DATE); +--------------------------+ | cast('01-11-11' as DATE) | +--------------------------+ | 2001-11-11 | +--------------------------+ 1 row in set (0.00 sec)
2. CAST 함수의 expr 값은 유형으로 변환될 수 있으며 변환 결과는 정확합니다. 그렇지 않으면 변환된 결과는 Null, 0 등과 같은 기본값을 갖게 됩니다.
예를 들어 Char 유형이 Demical 유형으로 변환되면 변환 결과는 0입니다.
rreee변환 사례
다음은 일반적으로 사용되는 유형 변환 예제입니다.
날짜 유형
mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.20 | +-----------+ 1 row in set (0.00 sec)
시간형
mysql> SELECT CAST('ANDYQIAN' AS DECIMAL); +-----------------------------+ | CAST('ANDYQIAN' AS DECIMAL) | +-----------------------------+ | 0 | +-----------------------------+ 1 row in set, 1 warning (0.00 sec)
날짜 유형
mysql> select cast('2017-12-14' as DATE); +----------------------------+ | cast('2017-12-14' as DATE) | +----------------------------+ | 2017-12-14 | +----------------------------+ 1 row in set (0.00 sec)
서명된 유형
mysql> select cast('12:00:00' as TIME); +--------------------------+ | cast('12:00:00' as TIME) | +--------------------------+ | 12:00:00 | +--------------------------+ 1 row in set (0.00 sec)
서명되지 않은 유형
mysql> select cast('2017-12-14 00:11:11' as DATETIME); +-----------------------------------------+ | cast('2017-12-14 00:11:11' as DATETIME) | +-----------------------------------------+ | 2017-12-14 00:11:11 | +-----------------------------------------+ 1 row in set (0.00 sec)
DECIMAL 유형
mysql> select cast('-1024' as SIGNED); +-------------------------+ | cast('-1024' as SIGNED) | +-------------------------+ | -1024 | +-------------------------+ 1 row in set (0.00 sec)
관련 권장 사항:
MySQL 인스턴스 공유를 업그레이드하는 가장 좋은 방법
PHP 캡슐화 Mysql 작업 클래스에 대한 자세한 설명
PHP가 중국어로 왜곡된 MySQL 저장 데이터 문제를 해결하는 방법
위 내용은 MySQL 명시적 유형 변환 예제 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!