MySQL에서 TIME(N) 또는 DATETIME(N) 값을 숫자 형식으로 변환하려면 해당 값에 0을 더하면 됩니다. 여기서 N은 초 단위의 소수점 이하 자릿수(소수 초 정밀도)를 의미하며, N 값에 따라 변환 결과가 달라집니다.
변환 시 적용되는 기본 규칙은 다음과 같습니다.
- N = 0 → 정수(INTEGER) 형태로 변환
- N > 0 → 소수(DECIMAL) 형태로 변환
정수(INTEGER)로 변환
N이 0일 경우, TIME(N)과 DATETIME(N) 값은 정수 형태로 변환됩니다. 예를 들어 CURTIME()과 NOW()의 반환값에 +0을 적용하면 다음과 같은 결과를 얻을 수 있습니다.
mysql> SELECT CURTIME(), CURTIME()+0; +-----------+-------------------+ | CURTIME() | CURTIME()+0 | +-----------+-------------------+ | 19:42:54 | 194254 | +-----------+-------------------+ 1 row in set (0.04 sec) mysql> SELECT NOW(), NOW()+0; +---------------------+------------------+ | NOW() | NOW()+0 | +---------------------+------------------+ | 2017-10-27 19:43:43 | 20171027194343 | +---------------------+------------------+ 1 row in set (0.00 sec)
위 예시에서 볼 수 있듯이, 시간 값 '19:42:54'는 '194254'로, 날짜·시간 값 '2017-10-27 19:43:43'은 '20171027194343'으로 각각 변환됩니다. 즉, 구분 기호가 제거된 형태의 정수가 반환됩니다.
소수(DECIMAL)로 변환
N이 0보다 큰 경우, TIME(N)과 DATETIME(N) 값은 소수점 이하 자릿수를 포함한 DECIMAL 형태로 변환됩니다. 예를 들어 CURTIME(3)과 NOW(3)처럼 소수 초 정밀도를 지정하면 다음과 같습니다.
mysql> SELECT CURTIME(), CURTIME(3)+0; +-----------+-------------------+ | CURTIME() | CURTIME(3)+0 | +-----------+-------------------+ | 19:47:40 | 194740.575 | +-----------+-------------------+ 1 row in set (0.04 sec) mysql> SELECT NOW(), NOW(3)+0; +-------------------------+----------------------+ | NOW() | NOW(3)+0 | +-------------------------+----------------------+ | 2017-10-27 19:48:45 | 20171027194845.589 | +-------------------------+----------------------+ 1 row in set (0.00 sec)
정밀도를 3으로 지정했기 때문에 밀리초 단위까지 소수 형태로 표현되는 것을 확인할 수 있습니다. 이처럼 +0 연산은 TIME·DATETIME 값을 정렬, 비교 또는 산술 연산에 활용해야 할 때 유용하게 사용됩니다.