데이터베이스 | 데이터베이스 | 내장 함수(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( ) : 날짜 정보에서 월에 해당하는 값을 반환
  • 월 이름: 날짜 정보에서 월(영문)에 해당하는 값을 반환
  • 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(날짜, INTERVAL 값 단위): 시간/날짜 추가

– 단위 : ‘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(날짜, INTERVAL 값 단위) : 시간/날짜 빼기

– 단위 : ‘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(날짜, 형식): 지정된 형식으로 시간/날짜를 반환합니다.

형태 설명하다
%ㅏ 요일은 세 글자로 표시됩니다.

일요일부터 토요일까지
%비 월의 3글자 약어입니다.

1월~12월
%씨 월을 숫자로 나타냅니다.

0~12
%디 날짜 뒤에 영문 일련번호 추가 0번째, 1번째, 2번째, 3번째…
%디 날짜를 두 자리 숫자로 나타냅니다.

00~31
%이자형 날짜를 숫자로 나타냅니다.

0 ~ 31
%에프 마이크로초를 6자리로 나타냅니다.

000000 ~ 999999
%시간 두 자리 숫자로 된 24시간 형식의 시간. 00에서 23
%시간 12시간 형식 시간은 두 자리 숫자로 표시됩니다.

01~12
%나 12시간 형식 시간은 두 자리 숫자로 표시됩니다.

01~12
%나 분은 두 자리 숫자로 표시됩니다.

00~59
%제이 3자리 숫자로 된 연도의 일입니다.

001 ~ 366
%케이 24시간 형식으로 시간을 나타냅니다.

0 ~ 23
%엘 시간을 12시간 형식으로 나타냅니다.

1~12
%중 완전한 문자열로 월을 나타냅니다.

1월~12월
%중 월을 두 자리 숫자로 나타냅니다.

00에서 12
%피 AM과 PM의 대문자. 오전 아니면 오후
%아르 자형 hh:mm:ss AM/PM 형식으로 시간을 나타냅니다.

(12시간 형식)
오전 00:00:01
%에스 초는 두 자리입니다.

00~59
%에스 초는 두 자리입니다.

00~59
%티 시간은 hh:mm:ss 형식으로 표시됩니다.

(24시간 형식)
23:01:01
% 유 해당 연도의 주를 나타내는 숫자입니다.

(주는 일요일에 시작)
00~53
%유 해당 연도의 주를 나타내는 숫자입니다.

(주는 월요일에 시작)
00~53
%V 해당 연도의 주를 나타내는 숫자입니다.


(주 시작은 일요일, %X 형식 사용)
00~53
%V 해당 연도의 주를 나타내는 숫자입니다.


(주는 월요일에 시작, %x 형식 사용)
00~53
%W 완전한 문자열로서의 요일. 일요일~토요일
%w 요일은 숫자로 표시됩니다.

0(일요일) ~ 6(토요일)
%엑스 전체 4자리 숫자로 연도를 나타냅니다.


(주 시작은 일요일, %V 형식 사용)
1999년 또는 2003년
%엑스 전체 4자리 숫자로 연도를 나타냅니다.


(주는 월요일에 시작, %v 형식 사용)
1999년 또는 2003년
%와이 전체 4자리 숫자로 연도를 나타냅니다.

1999년 또는 2003년
%와이 연도는 두 자리입니다.

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



소스 및 인용하다