새소식

SQL

SQL | MySQL | 내장 함수(2) - 날짜, 시간 함수

  • -

 

 

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');

 

'2019-09-01'을 YYYY-MM-DD 형식으로 읽어서 날짜 값으로 변환.

 

SELECT STR_TO_DATE('2021-9-1 14:30', '%Y-%m-%d %H:%i:%s');

 

'2021-9-1 14:30'을 YYYY-MM-DD HH:MI:SS 형식으로 읽어 DATETIME 값으로 변환

 

 


출처 및 참고 문헌(reference)

 

 

Contents