Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 TIME·DATETIME 값을 숫자 형식으로 변환하는 방법

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 값을 정렬, 비교 또는 산술 연산에 활용해야 할 때 유용하게 사용됩니다.