SQL 날짜 함수
MySQL은 시간과 날짜는 ‘proleptic Gregorian calendar’ 그레고리력을 사용합니다. 또한 다양한 시간 관련 처리를 위한 내장 함수를 제공합니다.
26.3.1 NOW( ), SYSDATE( ), CURRENT_TIMESTAMP()
현재의 날짜와 시간을 출력합니다.
| 콘솔 실습 화면 |
mysql> select now(), sysdate(), current_timestamp();
+---------------------+---------------------+---------------------+
| now() | sysdate() | current_timestamp() |
+---------------------+---------------------+---------------------+
| 2017-06-11 18:11:37 | 2017-06-11 18:11:37 | 2017-06-11 18:11:37 |
+---------------------+---------------------+---------------------+
1 row in set (0.01 sec)
26.3.2 CURDATE()
현재의 일자를 반환합니다.
| 콘솔 실습 화면 |
mysql> select curdate(), CURRENT_DATE();
+------------+----------------+
| curdate() | CURRENT_DATE() |
+------------+----------------+
| 2017-06-11 | 2017-06-11 |
+------------+----------------+
1 row in set (0.00 sec)
26.3.3 CURTIME()
현재의 시간을 반환합니다.
| 콘솔 실습 화면 |
mysql> select curtime(), CURRENT_TIME();
+-----------+----------------+
| curtime() | CURRENT_TIME() |
+-----------+----------------+
| 18:10:28 | 18:10:28 |
+-----------+----------------+
1 row in set (0.00 sec)
26.3.4 DATE_ADD(날짜, INTERVAL 기준 값)
날짜에서 기준 값만큼 더합니다.
| 콘솔 실습 화면 |
mysql> SELECT DATE_ADD('2017-01-02', INTERVAL 42 DAY);
+-----------------------------------------+
| DATE_ADD('2017-01-02', INTERVAL 42 DAY) |
+-----------------------------------------+
| 2017-02-13 |
+-----------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_ADD('2017-06-09', INTERVAL 1 MONTH);
+------------------------------------------+
| DATE_ADD('2017-06-09', INTERVAL 1 MONTH) |
+------------------------------------------+
| 2017-07-09 |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_ADD('2017-06-09', INTERVAL 1 YEAR);
+-----------------------------------------+
| DATE_ADD('2017-06-09', INTERVAL 1 YEAR) |
+-----------------------------------------+
| 2018-06-09 |
+-----------------------------------------+
1 row in set (0.00 sec)
※ 기준 값: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
26.3.5 DATE_SUB(날짜, INTERVAL 기준 값)
날짜에서 기준 값만큼 뺍니다.
| 콘솔 실습 화면 |
mysql> SELECT DATE_SUB('2017-01-02', INTERVAL 42 DAY);
+-----------------------------------------+
| DATE_SUB('2017-01-02', INTERVAL 42 DAY) |
+-----------------------------------------+
| 2016-11-21 |
+-----------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_SUB('2017-06-09', INTERVAL 1 MONTH);
+------------------------------------------+
| DATE_SUB('2017-06-09', INTERVAL 1 MONTH) |
+------------------------------------------+
| 2017-05-09 |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_SUB('2017-06-09', INTERVAL 1 YEAR);
+-----------------------------------------+
| DATE_SUB('2017-06-09', INTERVAL 1 YEAR) |
+-----------------------------------------+
| 2016-06-09 |
+-----------------------------------------+
1 row in set (0.00 sec)
※ 기준 값: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
26.3.6 YEAR(날짜), MONTH(날짜), DAY (날짜)
입력된 날짜에서 각각 연도, 월, 일을 찾아서 반환합니다.
| 콘솔 실습 화면 |
mysql> select year('2017-06-09'), month('2017-06-09'), day('2017-06-09');
+--------------------+---------------------+-------------------+
| year('2017-06-09') | month('2017-06-09') | day('2017-06-09') |
+--------------------+---------------------+-------------------+
| 2017 | 6 | 9 |
+--------------------+---------------------+-------------------+
1 row in set (0.00 sec)
26.3.7 HOUR( ), MINUTE( ), SECOND()
시간, 분, 초를 반환합니다.
| 콘솔 실습 화면 |
mysql> select hour(now()), minute(now()), second(now());
+-------------+---------------+---------------+
| hour(now()) | minute(now()) | second(now()) |
+-------------+---------------+---------------+
| 17 | 15 | 46 |
+-------------+---------------+---------------+
1 row in set (0.00 sec)
26.3.8 MONTHNAME(날짜), DAYNAME (날짜)
날짜의 월과 요일일 영어로 출력합니다.
| 콘솔 실습 화면 |
mysql> select MONTHNAME('2017-06-09'), DAYNAME('2017-06-09');
+-------------------------+-----------------------+
| MONTHNAME('2017-06-09') | DAYNAME('2017-06-09') |
+-------------------------+-----------------------+
| June | Friday |
+-------------------------+-----------------------+
1 row in set (0.00 sec)
26.3.9 DAYOFMONTH (날짜),
날짜의 월별 일자를 출력합니다.
| 콘솔 실습 화면 |
mysql> select DAYOFMONTH('2017-06-09');
+--------------------------+
| DAYOFMONTH('2017-06-09') |
+--------------------------+
| 9 |
+--------------------------+
1 row in set (0.00 sec)
26.3.10 DAYOFWEEK (날짜)
날짜의 주별 일자를 출력합니다(월요일(0), 화요일(1) … 일요일(6)).
| 콘솔 실습 화면 |
mysql> select DAYOFWEEK('2017-06-09');
+-------------------------+
| DAYOFWEEK('2017-06-09') |
+-------------------------+
| 6 |
+-------------------------+
1 row in set (0.00 sec)
26.3.11 WEEKDAY (날짜)
날짜의 주별 일자 출력합니다(월요일(0), 화요일(1) … 일요일(6)).
| 콘솔 실습 화면 |
mysql> select WEEKDAY('2017-06-09');
+-----------------------+
| WEEKDAY('2017-06-09') |
+-----------------------+
| 4 |
+-----------------------+
1 row in set (0.00 sec)
26.3.12 QUARTER (날짜)
입력한 날짜의 분기를 출력합니다.
| 콘솔 실습 화면 |
mysql> select quarter('2017-07-09');
+-----------------------+
| quarter('2017-07-09') |
+-----------------------+
| 3 |
+-----------------------+
1 row in set (0.00 sec)
26.3.13 DAYOFYEAR (날짜)
일년을 기준으로 한 날짜까지의 날 수를 출력합니다.
| 콘솔 실습 화면 |
mysql> select DAYOFYEAR('2017-06-09');
+-------------------------+
| DAYOFYEAR('2017-06-09') |
+-------------------------+
| 160 |
+-------------------------+
1 row in set (0.00 sec)
26.3.14 WEEK(날짜)
일년 중 몇 번째 주인지를 출력합니다.
| 콘솔 실습 화면 |
mysql> select WEEK('2017-06-09');
+--------------------+
| WEEK('2017-06-09') |
+--------------------+
| 23 |
+--------------------+
1 row in set (0.00 sec)
26.3.15 FROM_DAYS (날 수)
0000년 00월 00일부터 날 수만큼 경과한 날의 날짜를 출력합니다.
| 콘솔 실습 화면 |
mysql> select from_days(736854);
+-------------------+
| from_days(736854) |
+-------------------+
| 2017-06-09 |
+-------------------+
1 row in set (0.00 sec)
26.3.16 TO_DAYS (날짜)
0000 년 00월 00일부터 날짜까지의 일자 수를 출력합니다.
| 콘솔 실습 화면 |
mysql> select to_days('2017-06-09');
+-----------------------+
| to_days('2017-06-09') |
+-----------------------+
| 736854 |
+-----------------------+
1 row in set (0.00 sec)
26.3.17 DATE_FORMAT (날짜, ‘형식’)
날짜를 형식에 맞게 출력합니다.
| 콘솔 실습 화면 |
mysql> select date_format(now(),'%Y %M %D %W');
+----------------------------------+
| date_format(now(),'%Y %M %D %W') |
+----------------------------------+
| 2017 June 9th Friday |
+----------------------------------+
1 row in set (0.00 sec)
26.3.18 TIME_FORMAT (날짜, ‘형식’)
시간과 형식을 문자열로 반환합니다.
| 콘솔 실습 화면 |
mysql> select time_format(now(),'%p %k %i');
+-------------------------------+
| time_format(now(),'%p %k %i') |
+-------------------------------+
| PM 17 05 |
+-------------------------------+
1 row in set (0.00 sec)
26.3.19 TIME_TO_SEC(시간)
입력한 시간의 0시부터 초를 반환합니다.
| 콘솔 실습 화면 |
mysql> select time_to_sec(curtime());
+------------------------+
| time_to_sec(curtime()) |
+------------------------+
| 61734 |
+------------------------+
1 row in set (0.00 sec)
26.3.20 SEC_TO_TIME(N)
0시부터 N초만큼 지난 시간을 반환합니다.
| 콘솔 실습 화면 |
mysql> select sec_to_time(1000);
+-------------------+
| sec_to_time(1000) |
+-------------------+
| 00:16:40 |
+-------------------+
1 row in set (0.00 sec)