CS/데이터베이스

[SQL] 시간, 날짜 관련 함수

딜레이레이 2024. 5. 11. 19:43

날짜와 시간의 형식화

  • DATE_FORMAT(date, format) : 주어진 date를 format에 맞춰 문자열로 반환
SELECT DATE_FORMAT(hiredate, '%Y-%m-%d') FROM EMP;
-- YYYY-mm-dd

SELECT DATE_FORMAT(hiredate, '%Y-%m-%d %T') FROM EMP;
SELECT DATE_FORMAT(hiredate, '%Y-%m-%d %H:%i:%s') FROM EMP;
-- YYYY-mm-dd 00:00:00

 

 

형태 설명
%a 요일을 세 개의 문자로 표현 Sun~Sat
%b 월(Month)을 세 개의 문자로 표현 Jan~Dec
%c 월을 숫자로 표현 0~12
%d 날짜를 두 자리 수로 표현 00~31
%e 날짜를 숫자로 표현 0~31
%f 마이크로초를 여섯 자리 수로 표현 000000~999999
%H 24시간 형식을 두 자리 숫자로 표현 00~23
%h, %I 12시간 형식을 두 자리 숫자로 표현 1~12
%i 분을 두 자리 숫자로 표현 00~59
%j 일 년 중 몇 번째 날인지 세 자리 수로 표현 001~366
%k 24시간 형식으로 시간 표현 00~23
%l 12시간 형식으로 시간 표현 1~12
%M 월을 완전한 문자열로 표현 January_December
%m 월을 두 자리 숫자로 표현 00~12
%p 오전과 오후의 대문자를 표현 AM 또는 PM
%w 요일을 숫자로 표현 0(일요일)~6(토요일)
%Y 연도를 네 자리 숫자로 표현 ex> 1998, 2004
%y 연도를 두 자리 숫자로 표현 ex> 98, 04
%% '%' 문자 %

 

특정 날짜와 시간 정보

  • DATE(exp) : 주어진 exp에 해당하는 날짜 정보 반환
  • FUNCTION(date) 
FUNCTION MONTH DAY HOUR MINUTE SECOND WEEKDAY
  월 (1~12) 일 (0~31) 시간 (0~23) 분 (0~59) 초 (0~59) 요일 (월=0, 일=6)
  • EXTRACT(part FROM date) : 주어진 date에서 원하는 part에 해당하는 숫자를 반환.

 

특정 날짜와 시간 연산

  • ADDDATE(date, INTERVAL value addunit) : date에 value addunit만큼 시간/날짜를 추가한 date를 반환(INTERVAL addunit 대신 days도 가능)
  • ADDTIME(datetime, addtime) : datetime에 addtime만큼 시간을 추가한 datetime을 반환
  • SUBDATE( date, INTERVAL value unit) : date에 valule unit만큼 시간/날짜를 뺀 date를 반환 (INTERVAL addunit 대신 days도 가능)
  • SUBTIME(datetime, addtime) : datetime에 addime만큼 시간을 뺀 datetime을 반환
SELECT ADDDATE("2024-05-11", INTERVAL 10 DAT)
-- 2022-05-21

SELECT ADDTIME("2024-05-11 13:22:19", "10 02:03")
-- 2024-05-21 15:25:19

 

특정 날짜나 시간의 차이 연산

  • PERIOD_DIFF(period1, period2) : 두 기간의 차이를 숫자로 변환 (period 형식은 YYMM 또는 YYYYMM만 가능, period1과 period2는 같은 형식이어야 함)
  • DATEDIFF(date1, date2) : 두 날짜 사이의 일수를 숫자로 반환(date1-date2)
  • TIMEDIFF(time1, time2) : 두 시간의 차이를 datetime 형태로 반환(time1-time2)
SELECT PERIOD_DIFF(202412, 202405)
-- 7

SELECT DATEDIFF('2024-12-28', '2024-01-26')
-- 337

SELECT TIMEDIFF('2024-05-11 19:41:11', '2024-05-11 13:29:21')
-- 06:11:50

 

[참고]