오라클에는 날짜형 데이터 타입이 DateTime, Timestamp 두가지 정도밖에 없는 것과 다르게
Mysql은 Date, Time, DateTime, Timestamp, Year .. 여러가지가 있는 것 같다
어떻게 보면 Mysql 쪽이 데이터타입이 많으니 뭔가 더 복잡한 것 같은데, 사실 데이터를 가져와서 이리저리 가공하는 경우가 더 많기때문에,, 그게 싫은 개발자라면 Mysql 쪽이 편할 수도 있겠다라는 생각을 하게 되었다. 그래도 난 오라클쪽이 더 직관적이고 유지보수하기 편할 것 같다. 기획자가 처음에는 년도만 필요한 것 같이 기획했지만 추후에 변경할 수가 있기 때문이당
날짜형 데이터 타입 대표적인 3가지 : DateTime, Date, Time
| 함수명 | 설명 | 반환되는 데이터 예시 | 반환 데이터 타입 |
| NOW() | 현재 날짜 + 시간 반환 | 2025-08-26 13:25:40 | DATETIME (YYYY-MM-DD HH:MM:SS) |
| CURDATE() | 현재 날짜 반환 | 2025-08-26 | DATE |
| CURTIME() | 현재 시간 반환 | 13:25:40 | TIME |
oracle 은 시스템 값이나 함수 결과를 얻고 싶을 때 "FROM DUAL;" 을 사용하지만 mysql 은 쓰지 않아도 된다.
select now(), curdate(), curtime();

TIMESTAMPDIFF (TIMEDIFF, DATEDIFF, ...)
내가 목표한 것은
오늘 날짜 00시 (2025-08-26 00:00:00) 기준으로, 현재 시간이 얼마나 흘렀는지 milliseconds 를 계산하는 것.
CURDATE() + INTERVAL 0 HOUR; 을 조회하면 2025-08-26 00:00:00 로 값이 나오길래
단순하게 SELECT CURDATE() - NOW(); 를 하면 될 줄 알았으나 이상한 값이 나왔다.
MariaDB [mydb]> SELECT CURDATE() - NOW();
+-------------------+
| CURDATE() - NOW() |
+-------------------+
| -20250805893581 |
+-------------------+
1 row in set (0.000 sec)
그래서 찾아봤더니, Mysql에는 원하는 단위로 시간 차이를 계산해주는 TIMESTAMPDIFF 라는 함수가 존재했다.. 매우 편리..!
SELECT
TIMESTAMPDIFF(SECOND, CURDATE(), NOW()) * 1000
+ FLOOR(MICROSECOND(NOW(6)) / 1000) AS milliseconds_passed
;
[ 쿼리 설명 ]
연산 순서 : 무지개순서
TIMESTAMPDIFF(SECOND, CURDATE(), NOW()) * 1000
TIMESTAMPDIFF(SECOND, CURDATE(), NOW()) * 1000
- CURDATE() ↔ NOW() 간의 SECOND 단위 차이값 계산
- 1초 = 1000밀리초 이므로 *(곱하기) 1000
FLOOR(MICROSECOND(NOW(6)) / 1000)
FLOOR(MICROSECOND(NOW(6)) / 1000)
- NOW(6) 으로 마이크로초까지의 현재 시간을 구한다.
- MICROSECOND() 함수로 now() 결과값으로부터 마이크로초를 가져온다.
- 1밀리초 = 1000마이크로초 이므로 ÷(나누기) 1000을 해준다.
- 나누기 연산은 소수점을 남기므로 소수점을 떼기 위해 FLOOR() 함수로 감싸준다.
+ 찾아보면서 알게 된 점.
NOW() -> 한번의 select 안에서는 시간 값이 고정됨.
SYSDATE() -> 한번의 select 안에서도 호출될때마다 시간값이 달라질 수 있음 (초단위가 달라질 수 있음)
참조글
MySQL에서 millisecond 나 microsecond 단위로 저장하기
MySQL에서 SELECT NOW(); 를 해보면 초 단위까지 밖에 안 나온다. 그러나 SELECT NOW(3); 을 하면 millisecond 단위까지 나오고, SELECT NOW(6); 을 하면 microsecond 단위까지 현재 시간이 나온다. 테이블 생성할때 컬
bryan7.tistory.com
https://hoing.io/archives/13958
MySQL NOW()와 SYSDATE()의 차이
포스팅에서는 MySQL의 NOW 함수와 SYSDATE 함수의 차이에 대해서 설명하고 있습니다.
hoing.io
'database > mysql' 카테고리의 다른 글
| Mysql과 MariaDB / RaspberryPI 에 MariaDB 설치하기 (1) | 2025.08.26 |
|---|