11.3.7 날짜 및 시간 형식 간의 변환
어느 정도까지의 시간 형식에서 다른 시간 형식으로 값을 변환 할 수 있습니다. 그러나 값의 변경이나 정보의 손실이 발생할 수 있습니다. 어떤 경우에도 시간 형 간의 변환은 변환되는 형태로 유효한 값의 범위에 따라 달라집니다. 예를 들어, DATE
, DATETIME
, 그리고 TIMESTAMP
값은 동일한 세트의 형식을 사용하여 지정할 수 있지만, 모든 형태의 값의 범위가 같은 것은 없습니다. TIMESTAMP
값은 1970
UTC 이전 값으로하고, '2038-01-19 03:14:07'
UTC보다 새로운 값으로 할 수 없습니다. 즉, '1968-01-01'
등의 날짜는 DATE
또는 DATETIME
값은 유효하지만 TIMESTAMP
값은 유효 아니라 0
으로 변환됩니다.
DATE
값의 변환 :
DATE
값은 시간 정보가 포함되지 않기 때문에,DATETIME
또는TIMESTAMP
값으로 변환하면'00:00:00'
의 시간 부분이 추가됩니다.TIME
값으로 변환 유용하지 않습니다. 결과는'00:00:00'
입니다.
DATETIME
과 TIMESTAMP
값의 변환 :
DATE
형은 시간 정보가 포함되지 않기 때문에DATE
값으로 변환하면 시간 부분이 삭제됩니다.TIME
형은 날짜 정보가 포함되지 않기 때문에,TIME
값으로 변환하면 날짜 부분이 삭제됩니다.
TIME
값 외에 시간 형식으로 변환은 버전에 따라 다릅니다.
MySQL 5.6.4 이후에서는
CURRENT_DATE()
의 값이 날짜 부분에 사용됩니다.TIME
(시간이 아니라) 경과 시간으로 해석됩니다 날짜에 추가됩니다. 이것은 시간 값이'00:00:00'
에서'23:59:59'
의 범위를 벗어난 경우 결과의 날짜 부분이 현재의 날짜와 다르다는 것을 의미합니다.현재 날짜가
'2012-01-01'
이라고합니다.'12:00:00'
,'24:00:00'
,'-12:00:00'
의TIME
값은DATETIME
또는TIMESTAMP
값으로 변환되면 각각'2012-01-01 12:00:00'
,'2012-01-02 00:00:00'
,'2011-12-31 12:00:00'
입니다.TIME
에서DATE
로 변환하는 것도 비슷하지만 결과에서 시간 부분이 삭제되고 각각'2012-01-01'
,'2012-01-02'
,'2011-12-31'
입니다.5.6.4 이전의 MySQL에서는 시간의 문자열을 날짜 또는 시간으로 분석하여 시간 값을 날짜 또는 시간 값으로 변환합니다. 이것이 도움이 될 수는 없습니다. 예를 들어,
'23:12:31'
은 날짜로 해석되면'2023-12-31'
입니다. 날짜 유효하지 않은 시간은'0000-00-00'
또는NULL
입니다.
명시 적 변환을 사용하여 암시 적 변환을 무시할 수 있습니다. 예를 들어 DATE
및 DATETIME
값의 비교에서 DATE
값은 '00:00:00'
의 시간 부분을 추가하여 강제로 DATETIME
형으로 변경됩니다. 대신 DATETIME
값의 시간 부분을 무시하고 비교를 실행하려면 다음과 같이 CAST()
함수를 사용합니다.
date_col
= CAST ( datetime_col
AS DATE)
TIME
및 DATETIME
값의 수치 형식으로 ( +0
추가 등에 의한) 변환은 다음과 같이 이루어집니다.
MySQL 5.6.4 이후에서는
TIME(
또는N
)DATETIME(
는N
)N
이 0 (또는 생략)의 경우 정수에N
이 양수의 경우N
의 10 진수를 포함DECIMAL
값으로 변환되고 합니다.mysql>
SELECT CURTIME(), CURTIME()+0, CURTIME(3)+0;
+-----------+-------------+--------------+ | CURTIME() | CURTIME()+0 | CURTIME(3)+0 | +-----------+-------------+--------------+ | 09:28:00 | 92800 | 92800.887 | +-----------+-------------+--------------+ mysql>SELECT NOW(), NOW()+0, NOW(3)+0;
+---------------------+----------------+--------------------+ | NOW() | NOW()+0 | NOW(3)+0 | +---------------------+----------------+--------------------+ | 2012-08-15 09:28:00 | 20120815092800 | 20120815092800.889 | +---------------------+----------------+--------------------+MySQL 5.6.4 이전에는, 변환의 결과는 마이크로 초 부분이
.000000
인 배정 밀도 값입니다.mysql>
SELECT CURTIME(), CURTIME()+0;
+-----------+--------------+ | CURTIME() | CURTIME()+0 | +-----------+--------------+ | 09:28:00 | 92800.000000 | +-----------+--------------+ mysql>SELECT NOW(), NOW()+0;
+---------------------+-----------------------+ | NOW() | NOW()+0 | +---------------------+-----------------------+ | 2012-08-15 09:28:00 | 20120815092800.000000 | +---------------------+-----------------------+