01. 현재 날짜, 시간 반환 함수
- CURRENT_DATE( ) , CURDATE( ) : 현재 날짜 반환
- CURRENT_TIME( ), CURTIME( ) : 현재 시간 반환
- CURRENT_TIMESTAMP( ), NOW( ) : 현재 시간과 날짜 반
SELECT CURDATE(),
CURTIME(),
NOW();
02. 특정 날짜, 시간정보 반환
· 예제 테이블
CREATE TABLE orders (
order_id INT NOT NULL AUTO_INCREMENT,
order_date DATE NOT NULL,
order_time TIME NOT NULL,
PRIMARY KEY (order_id)
);
INSERT INTO orders (order_date, order_time) VALUES
('2022-01-01', '10:30:00'),
('2022-01-02', '14:45:00'),
('2022-01-03', '18:00:00'),
('2022-01-04', '09:15:00'),
('2022-01-05', '16:30:00'),
('2022-01-06', '11:00:00'),
('2022-01-07', '13:45:00'),
('2022-01-08', '20:00:00'),
('2022-01-09', '12:00:00'),
('2022-01-10', '15:30:00');
1) 날짜
- DATE( ) : 문자열에 따라 날짜 정보 생성
- YEAR( ) : 날짜 정보에서 연도에 해당하는 값 반환
- MONTH( ) : 날짜 정보에서 월에 해당하는 값 반환
- MONTHNAME: 날짜 정보에서 월(영문)에 해당하는 값 반환
- DAYOFMONTH( ) , DAY( ) : 날짜 정보에서 일자에 해당하는 값 반환
- WEEKDAY( ) : 날짜 정보에서 요일값 반환(월요일이 0임)
- DAYNAME( ) : 날짜 정보에서 요일명 반환
SELECT
'2023-3-8' = '2023-03-08',
DATE('2023-3-8') = DATE('2023-03-08');
SELECT
order_date,
YEAR(order_date) 연도,
MONTH(order_date) 월,
MONTHNAME(order_date) 월,
DAYOFMONTH(order_date) 일,
DAY(order_date) 일,
WEEKDAY(order_date) 요일값,
DAYNAME(order_date) 요일명
FROM orders;
2) 시간
- TIME( ) : 문자열에 따라 시간 정보 생성
- HOUR( ) : 시간 정보에서 시간에 해당하는 값 반환
- MINUTE( ) : 시간 정보에서 분에 해당하는 값 반환
- SECOND( ): 시간 정보에서 초에 해당하는 값 반환
SELECT
'1:2:3' = '01:02:03',
TIME('1:2:3') = TIME('01:02:03');
SELECT
NOW() ,
HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
SELECT
order_time,
HOUR(order_time),
MINUTE(order_time),
SECOND(order_time)
FROM orders;
03. 시간 / 날짜 연산 함수
- ADDDATE, DATE_ADD(date, INTERVAL value unit) : 시간/날짜 더하기
- unit : 'MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR가 올 수 있음.
SELECT
date(now()),
ADDDATE(date(now()), INTERVAL 1 YEAR),
ADDDATE(date(now()), INTERVAL -2 MONTH),
ADDDATE(date(now()), INTERVAL 3 WEEK),
ADDDATE(date(now()), INTERVAL -4 DAY),
ADDDATE(date(now()), INTERVAL -5 MINUTE),
ADDDATE(now(), INTERVAL 6 SECOND);
SELECT
order_date,
ADDDATE(order_date, INTERVAL 1 YEAR),
ADDDATE(order_date, INTERVAL -2 MONTH),
ADDDATE(order_date, INTERVAL 3 WEEK),
ADDDATE(order_date, INTERVAL -3 DAY),
ADDDATE(order_date, INTERVAL -10 MINUTE)
FROM Orders;
- SUBDATE, DATE_SUB(date, INTERVAL value unit) : 시간/날짜 빼기
- unit : 'MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR가 올 수 있음.
SELECT
SUBDATE('2022-03-08', INTERVAL 1 DAY),
SUBDATE('2022-03-08', INTERVAL -1 MONTH);
SELECT
order_date,
SUBDATE(order_date, INTERVAL 1 YEAR),
SUBDATE(order_date, INTERVAL -2 MONTH),
SUBDATE(order_date, INTERVAL 3 WEEK),
SUBDATE(order_date, INTERVAL -3 DAY),
SUBDATE(order_date, INTERVAL -10 MINUTE)
FROM Orders;
- DATE_DIFF(end_date, start_date) : 두 개의 날짜 간의 일 수 차이를 계산해 반환.
- TIME_DIFF(time1, time2): 두 개의 시간 또는 날짜/시간 값 사이의 차이를 계산하여 반환.
- time1, time2 값 모두 시간 형식(HH:MM:SS) 또는 날짜/시간 형식(YYYY-MM-DD HH:MM:SS)이어야 함.
SELECT DATEDIFF('2023-03-10', '2023-03-08'),
DATEDIFF('2023-03-08', '2023-03-10'),
DATEDIFF(NOW(), '2023-03-01');
SELECT
TIMEDIFF('23:59:59', '00:00:01'),
TIMEDIFF('2023-03-08 09:00:00', '2023-03-08 08:30:00');
- LAST_DAY(date) : 입력된 날짜의 월의 마지막 날짜를 반환
SELECT
order_date,
LAST_DAY(order_date),
DAY(LAST_DAY(order_date)),
DATEDIFF(LAST_DAY(order_date), order_date)
FROM Orders;
- DATE_FORMAT(date, format) : 시간/날짜를 지정한 형식으로 반환
형태 | 설명 | 예시 |
%a | 요일을 세 개의 문자로 표현함. | Sun부터 Sat |
%b | 월의 축약형을 세 개의 문자로 표현함. | Jan부터 Dec |
%c | 월을 숫자로 표현함. | 0부터 12 |
%D | 날짜 뒤에 영어 서수를 붙임 | 0th, 1st, 2nd, 3rd, ... |
%d | 날짜를 두 자리 숫자로 표현함. | 00부터 31 |
%e | 날짜를 숫자로 표현함. | 0부터 31 |
%f | 마이크로초를 여섯 자리 숫자로 표현함. | 000000에서 999999 |
%H | 24시간 형식 시간을 두 자리 숫자로 표현함. | 00부터 23 |
%h | 12시간 형식 시간을 두 자리 숫자로 표현함. | 01부터 12 |
%I | 12시간 형식 시간을 두 자리 숫자로 표현함. | 01부터 12 |
%i | 분을 두 자리 숫자로 표현함. | 00부터 59 |
%j | 일 년 중 몇 번째 날인지를 세 자리 숫자로 표현함. | 001부터 366 |
%k | 24시간 형식으로 시간을 표현함. | 0부터 23 |
%l | 12시간 형식으로 시간을 표현함. | 1부터 12 |
%M | 월을 완전한 문자열로 표현함. | January부터 December |
%m | 월을 두 자리 숫자로 표현함. | 00부터 12 |
%p | 오전과 오후의 대문자를 표현함. | AM 또는 PM |
%r | hh:mm:ss AM/PM 형식으로 시간을 표현함. (12시간 형식) | 00:00:01 AM |
%S | 초를 두 자리 숫자로 표현함. | 00부터 59 |
%s | 초를 두 자리 숫자로 표현함. | 00부터 59 |
%T | hh:mm:ss 형식으로 시간을 표현함. (24시간 형식) | 23:01:01 |
%U | 일 년 중 몇 번째 주인지를 숫자로 표현함. (한 주는 일요일부터 시작함) | 00부터 53 |
%u | 일 년 중 몇 번째 주인지를 숫자로 표현함. (한 주는 월요일부터 시작함) | 00부터 53 |
%V | 일 년 중 몇 번째 주인지를 숫자로 표현함. (한 주는 일요일부터 시작하고, %X 형식을 사용함) |
00부터 53 |
%v | 일 년 중 몇 번째 주인지를 숫자로 표현함. (한 주는 월요일부터 시작하고, %x 형식을 사용함) |
00부터 53 |
%W | 요일을 완전한 문자열로 표현함. | Sunday부터 Saturday |
%w | 요일을 숫자로 표현함. | 0(일요일)부터 6(토요일) |
%X | 연도를 완전한 네 자리 숫자로 표현함. (한 주는 일요일부터 시작하고, %V 형식을 사용함) |
1999나 2003 |
%x | 연도를 완전한 네 자리 숫자로 표현함. (한 주는 월요일부터 시작하고, %v 형식을 사용함) |
1999나 2003 |
%Y | 연도를 완전한 네 자리 숫자로 표현함. | 1999나 2003 |
%y | 연도를 두 자리 숫자로 표현함. | 99나 03 |
%% | '%' 문자 | % |
출처: http://www.tcpschool.com/mysql/mysql_builtInFunction_dateTime
SELECT DATE_FORMAT('2021-03-08', '%Y-%m-%d'),
DATE_FORMAT('2021-03-08', '%W, %M %e, %Y'),
DATE_FORMAT('2021-03-08', '%Y년 %m월 %d일');
- STR_TO_DATE(변환할 문자열, 포맷 문자열)
SELECT STR_TO_DATE('2021-09-01', '%Y-%m-%d');
SELECT STR_TO_DATE('2021-9-1 14:30', '%Y-%m-%d %H:%i:%s');
출처 및 참고 문헌(reference)
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
MySQL :: MySQL 8.0 Reference Manual :: 12.7 Date and Time Functions
12.7 Date and Time Functions This section describes the functions that can be used to manipulate temporal values. See Section 11.2, “Date and Time Data Types”, for a description of the range of values each date and time type has and the valid formats
dev.mysql.com
http://www.tcpschool.com/mysql/mysql_builtInFunction_dateTime
'SQL' 카테고리의 다른 글
SQL | MySQL | Window Functions (1) - 데이터 순위 (0) | 2023.03.09 |
---|---|
SQL | MySQL | 그룹에 따른 집계 - GROUP BY, HAVING (0) | 2023.03.09 |
SQL | MySQL | 내장 함수(1) - 숫자, 문자와 관련된 함수 (0) | 2023.03.08 |
SQL | MySQL | SELECT(2) - 연산자(산술, 비교, 논리) (0) | 2023.03.07 |
SQL | MySQL | SELECT(1) - 간단한 데이터 조작 (0) | 2023.03.07 |