본문 바로가기

MySQL/MySQL Tip & Tech

[MySQL] 날짜 함수

MySQL의 날짜 함수를 정리해 봤습니다.

MS-SQL을 사용할 때와 비교하면..

장점 : 직접 구현해야했던 동작까지 바로 제공해주는 다양한 함수
단점 : 같은 동작을 하는 함수가 중복하여 존재한다. 이름만 다르거나, 인자의 순서 또는 형식이 다르거나...

프로젝트 초기에 coding convention을 정하고 작성하는 것은 당연한 일이겠지만, MySQL을 사용한다면 함수에 대해서도

어떤 동작에 어떤 함수를 쓰기로 미리 약속

하는 것이 좋을 것 같습니다.

예를들면 "날짜를 더하고 뺄때 TIMESTAMPADD()만 사용하기로 합니다" 와 같은 것!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-- 현재 date 조회
SELECT CURDATE();
SELECT CURTIME(6);
SELECT NOW(6);
SELECT UNIX_TIMESTAMP('2015-01-01 01:23:45');
 
 
-- 날짜 연산
-- interval : MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR
SELECT TIMESTAMPADD(DAY, 3'2015-01-01 00:00:00');
SELECT TIMESTAMPDIFF(DAY, '2015-01-01', NOW());
SELECT TIMEDIFF(NOW(), '2015-06-01 13:00:00');
SELECT LAST_DAY(NOW());
 
 
-- 변환
SELECT FROM_UNIXTIME(1420038000);
SELECT FROM_UNIXTIME(2100000001'%Y/%m/%d %T.%f');
SELECT DAYOFWEEK(NOW()); -- 요일 (1 ~ 7) / 1=일요일
SELECT DAYNAME(NOW()); -- 요일 (문자)
SELECT MONTHNAME(); -- 월 (문자)
SELECT SEC_TO_TIME(3600);
SELECT TIME_TO_SEC('1:00:00');
 
 
-- 추출
SELECT DATE(NOW()); -- YYYY-MM-DD
SELECT TIME(NOW(6)); -- HH:MM:SS.xxxxxx
SELECT YEAR(NOW());
SELECT QUARTER(NOW());
SELECT WEEK(NOW(), 3); -- = WEEKOFYEAR(NOW())
SELECT MONTH(NOW());
SELECT DAY(NOW()); -- synonym : DAYOFMONTH()
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());
SELECT MICROSECOND(NOW(6));
 
 
-- 포맷
SELECT DATE_FORMAT(NOW(), '%m'); -- 월 (00 ~ 12)
SELECT DATE_FORMAT(NOW(), '%d'); -- 일 (00 ~ 31)
SELECT DATE_FORMAT(NOW(), '%H'); -- 시간 (00 ~ 23)
SELECT DATE_FORMAT(NOW(), '%h'); -- 시간 (1 ~ 12)
SELECT DATE_FORMAT(NOW(), '%p'); -- AM/PM
SELECT DATE_FORMAT(NOW(), '%i'); -- 분 (00 ~ 59)
SELECT DATE_FORMAT(NOW(), '%S'); -- 초 (00 ~ 59)
SELECT DATE_FORMAT(NOW(6), '%f'); -- 마이크로초
SELECT DATE_FORMAT(NOW(), '%T'); -- 시:분:초
SELECT DATE_FORMAT(NOW(), '%W'); -- 요일 (문자열)
SELECT DATE_FORMAT(NOW(), '%Y'); -- 연도 (YYYY)
 
SELECT DATE_FORMAT(NOW(6), '%Y/%m/%d %T.%f');
 
SELECT STR_TO_DATE('29.06.2015', GET_FORMAT(DATE,'EUR')); -- DATE_FORMAT()의 역함수
cs