Loading...
MySQL 9.5 Reference Manual 9.5의 13.2.8 Conversion Between Date and Time Types의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
어느 정도까지는 한 temporal 타입의 값을 다른 temporal 타입으로 변환할 수 있습니다. 그러나 값이 일부 변경되거나 정보가 손실될 수 있습니다. 모든 경우에 temporal 타입 간의 변환은 결과 타입에 대해 유효한 값의 범위에 따릅니다. 예를 들어,
DATE,
DATETIME, 그리고
TIMESTAMP 값 모두 동일한 형식 집합을 사용해 지정할 수 있지만, 이 타입들은 모두 동일한 값 범위를 갖지는 않습니다.
TIMESTAMP 값은 UTC 기준으로 1970 이전이거나
'2038-01-19 03:14:07' 이후가 될 수 없습니다. 이는
'1968-01-01' 같은 날짜가
DATE 또는
DATETIME 값으로는 유효하지만
TIMESTAMP 값으로는 유효하지 않으며 0으로 변환된다는 뜻입니다.
DATE 값의 변환:
DATETIME 또는
TIMESTAMP 값으로의 변환은 time
부분이 '00:00:00'인 값을 추가합니다. 이는
DATE 값이 time 정보를 포함하지 않기 때문입니다.
TIME 값으로의 변환은 유용하지 않습니다. 결과는
'00:00:00'입니다.
DATE 값으로의 변환은 fractional seconds를 고려하여 time 부분을 반올림합니다. 예를 들어,
'1999-12-31 23:59:59.499'는
'1999-12-31'이 되고,
'1999-12-31 23:59:59.500'는
'2000-01-01'이 됩니다.
TIME 값으로의 변환은 date 부분을 버립니다. 이는
TIME 타입이 date 정보를 포함하지 않기 때문입니다.
TIME 값을 다른 temporal 타입으로 변환할 때는, date 부분에
CURRENT_DATE() 값이 사용됩니다.
TIME은 하루 중 시각이 아니라 경과 시간으로 해석되어 date에 더해집니다. 이는 time 값이
'00:00:00'에서 '23:59:59' 범위를 벗어나는 경우, 결과의 date 부분이 현재 date와 달라진다는 의미입니다.
현재 date가
'2012-01-01'이라고 가정합니다.
TIME 값
'12:00:00', '24:00:00',
그리고 '-12:00:00'이
DATETIME 또는
TIMESTAMP 값으로 변환되면, 각각
'2012-01-01 12:00:00', '2012-01-02 00:00:00', 그리고 '2011-12-31 12:00:00'이 됩니다.
TIME에서
DATE로의 변환도 비슷하지만, 결과에서 time 부분을 버립니다. 즉, 각각
'2012-01-01',
'2012-01-02',
'2011-12-31'이 됩니다.
명시적 변환(explicit conversion)을 사용하여 암시적 변환(implicit conversion)을 재정의할 수 있습니다. 예를 들어
DATE 값과
DATETIME 값의 비교에서,
DATE 값은 time 부분
'00:00:00'을 추가하여
DATETIME 타입으로 강제 변환됩니다. 대신
DATETIME 값의 time 부분을 무시하고 비교를 수행하려면, 다음과 같이
CAST() 함수를 사용합니다:
1date_col = CAST(datetime_col AS DATE)
TIME 및
DATETIME 값을 numeric 형식으로 변환할 때(예: +0을 더하는 방식)는, 값이 fractional seconds 부분을 포함하는지 여부에 따라 달라집니다.
TIME(N)
또는
DATETIME(N)은
_N_이 0이거나 생략된 경우 정수로, _N_이 0보다 큰 경우에는 소수 자릿수가
_N_개인 DECIMAL 값으로 변환됩니다:
1mysql> SELECT CURTIME(), CURTIME()+0, CURTIME(3)+0; 2+-----------+-------------+--------------+ 3| CURTIME() | CURTIME()+0 | CURTIME(3)+0 | 4+-----------+-------------+--------------+ 5| 09:28:00 | 92800 | 92800.887 | 6+-----------+-------------+--------------+ 7mysql> SELECT NOW(), NOW()+0, NOW(3)+0; 8+---------------------+----------------+--------------------+ 9| NOW() | NOW()+0 | NOW(3)+0 | 10+---------------------+----------------+--------------------+ 11| 2012-08-15 09:28:00 | 20120815092800 | 20120815092800.889 | 12+---------------------+----------------+--------------------+
13.2.7 What Calendar Is Used By MySQL?
13.2.9 2-Digit Years in Dates