날짜 데이터타입 종류
- DATE(년월일)
- TIME(시분초)
- DATETIME(년월일시분초)
- TIMESTAMP(초단위)
NOW | SYSDATE | CURRENT_TIMESTAMP
- 세 함수 모두 동일하게 현재 서버의 날짜 시간값을 DATETIME 타입으로 돌려준다.
SELECT NOW(), SYSDATE(), CURRENT_TIMESTAMP();
NOW() |SYSDATE() |CURRENT_TIMESTAMP()|
-------------------+-------------------+-------------------+
2023-08-29 15:45:21|2023-08-29 15:45:21|2023-08-29 15:45:21|
CURRENT_DATE | CURDATE / CURRENT_TIME | CURTIME
- CURRENT_DATE : 현재 서버의 DATE 정보만 돌려준다.
- CURDATE
- CURRENT_TIME : 현재 서버의 TIME 정보만 돌려준다.
- CURTIME
SELECT current_date(), current_time();
current_date()|current_time()|
--------------+--------------+
2023-08-29| 16:06:27|
YEAR / MONTH / DAY | DAYOFMONTH / HOUR / MINUTE / SECOND
- date, time의 각 요소값들을 숫자데이터로 출력해주는 함수
SELECT employee_id, hire_date
FROM employees
WHERE MONTH(hire_date) > 10
AND YEAR(hire_date) >= 1998;
employee_id|hire_date |
-----------+----------+
113|1999-12-07|
118|1998-11-15|
124|1999-11-16|
135|1999-12-12|
154|1998-12-09|
155|1999-11-23|
161|1998-11-03|
191|1999-12-19|
SELECT hour(now()), minute(now()), second(now());
hour(now())|minute(now())|second(now())|
-----------+-------------+-------------+
16| 16| 56|
DATE / TIME
- 각각 날짜 또는 시간 요소를 포함하는 데이터에서 DATE(년월일), TIME(시분초)의 요소를 출력해주는 함수.
SELECT DATE(now()), TIME(now());
DATE(now())|TIME(now())|
-----------+-----------+
2023-08-29| 16:19:38|
ADDDATE|DATE_ADD / SUBDATE|DATE_SUB
- 년월일의 단위로 날짜에 대한 덧셈과 뺄셈을 할 수 있다.
- 함수(날짜, INTERVAL 크기 YEAR|MONTH|DAY)
SELECT ADDDATE(NOW(), INTERVAL 100 DAY) DAY,
ADDDATE('2023-08-31', INTERVAL 6 MONTH) MONTH,
ADDDATE(NOW(), INTERVAL 19 YEAR) YEAR;
DAY |MONTH |YEAR |
-------------------+----------+-------------------+
2023-12-07 16:31:06|2024-02-29|2042-08-29 16:31:06|
SELECT SUBDATE(NOW(), INTERVAL 100 DAY) DAY,
SUBDATE('2023-08-31', INTERVAL 6 MONTH) MONTH,
SUBDATE(NOW(), INTERVAL 19 YEAR) YEAR;
DAY |MONTH |YEAR |
-------------------+----------+-------------------+
2023-05-21 16:32:30|2023-02-28|2004-08-29 16:32:30|
SELECT last_name, hire_date,
adddate(hire_date, INTERVAL 6 MONTH) AS "입사 6개월 후",
subdate(hire_date, INTERVAL 7 day) AS "입사 7일전"
FROM employees
WHERE department_id = 60;
last_name|hire_date |입사 6개월 후 |입사 7일전 |
---------+----------+----------+----------+
Hunold |1990-01-03|1990-07-03|1989-12-27|
Ernst |1991-05-21|1991-11-21|1991-05-14|
Austin |1997-06-25|1997-12-25|1997-06-18|
Pataballa|1998-02-05|1998-08-05|1998-01-29|
Lorentz |1999-02-07|1999-08-07|1999-01-31|
ADDTIME / SUBTIME
- 시분초의 단위로 시간 데이터를 더하거나 빼는 연산을 연산해주는 함수
SELECT ADDTIME(NOW(), '1:10:00'), SUBTIME(NOW(), '9:0:0'),
ADDTIME(NOW(), '100:30:40'), SUBTIME(NOW(), '200:30:40');
ADDTIME(NOW(), '1:10:00')|SUBTIME(NOW(), '9:0:0')|ADDTIME(NOW(), '100:30:40')|SUBTIME(NOW(), '200:30:40')|
-------------------------+-----------------------+---------------------------+---------------------------+
2023-08-29 17:53:48| 2023-08-29 07:43:48| 2023-09-02 21:14:28| 2023-08-21 08:13:08|
DATEDIFF / TIMEDIFF
- DATEDIFF(날짜1, 날짜2) : 두 날짜를 입력받아 두 날짜간 차이 일 수를 계산해주는 연산
- TIMEDIFF(시간1, 시간2) : 두 시간을 입력받아 두 시간의 차이를 출력해주는 연산
SELECT datediff(now(), '2023-01-01'), datediff('2023-01-01', NOW());
datediff(now(), '2023-01-01')|datediff('2023-01-01', NOW())|
-----------------------------+-----------------------------+
240| -240|
- 시간 차이값의 경우 음수의 시간값은 없기 때문에 순서에 상관없이 두 시간의 차이값만 출력된다.
SELECT timediff(current_time(), '17:50:00'), timediff('17:50:00', current_time());
timediff(current_time(), '17:50:00')|timediff('17:50:00', current_time())|
------------------------------------+------------------------------------+
00:42:34| 00:42:34|
SELECT last_name, hire_date, DATEDIFF(now(), hire_date) AS "근무한 일수"
FROM employees;
last_name |hire_date |근무한 일수|
-----------+----------+------+
King |1987-06-17| 13222|
Kochhar |1989-09-21| 12395|
De Haan |1993-01-13| 11185|
Hunold |1990-01-03| 12291|
Ernst |1991-05-21| 11788|
Austin |1997-06-25| 9561|
Pataballa |1998-02-05| 9336|
DAYOFWEEK / MONTHNAME / DAYOFYEAR
- DAYOFWEEK : 일주일 중 일요일부터 입력된 날짜값이 몇번째 요일인지 숫자로 결과를 출력해주는 함수. 요일은 (일 - 1) ~ (토 - 7) 의 숫자 값으로 출력된다.
- MONTHNAME : 입력된 날짜의 월단위의 값을 영문자로 출력해주는 함수
- DAYOFYEAR : 일년 중 입력한 날짜가 몇 번째 날짜인지 계산해주는 함수
SELECT DAYOFWEEK(NOW()), MONTHNAME(NOW()), DAYOFYEAR(NOW());
DAYOFWEEK(NOW())|MONTHNAME(NOW())|DAYOFYEAR(NOW())|
----------------+----------------+----------------+
3|August | 241|
SELECT employee_id, last_name, hire_date, monthname(hire_date)
FROM employees;
employee_id|last_name |hire_date |monthname(hire_date)|
-----------+-----------+----------+--------------------+
100|King |1987-06-17|June |
101|Kochhar |1989-09-21|September |
102|De Haan |1993-01-13|January |
103|Hunold |1990-01-03|January |
104|Ernst |1991-05-21|May |
105|Austin |1997-06-25|June |
LAST_DAY
- 입력 날짜가 속한 월의 마지막 날을 계산해주는 함수
SELECT last_day(now());
last_day(now())|
---------------+
2023-08-31|
QUARTER
- 입력한 날짜가 속한 분기를 숫자로 출력 (230829)
SELECT QUARTER(now());
QUARTER(now())|
--------------+
3|