DATE 함수

J·2023년 1월 23일

날짜/시간 데이터 타입 특징

DATE : 날짜 정보 'YYYY-MM-DD'
DATETIME : 날짜와 시간 정보 'YYYY-MM-DD HH:MM:SS'
TIME : 시간정보 'HH:MM:SS'
YEAR : 네자리 연도
TIMESTAMP : DATETIME에 추가로 시간대(Timezone 정보) 포함 가능



날짜형 함수

함수반환값
NOW()현재 날짜와 시간 반환NOW() → 2023-01-28 10:30:01
CURRENT_DATE()현재 날짜 환CUR_DATE() → 2023-01-28
YEAR(date)연 반환YEAR('2023-01-28') → 2023
MONTH(date)월 반환MONTH('2023-01-28') → 1
QUARTER(date)분기 반환QUARTER('2023-01-28') → 1
DAY(date)일 반환DAY('2023-01-28') → 28
DATE()'YYYY-MM-DD'반환DATE(NOW()) → 2023-01-28
DATE_FORMAT(date, format)*format에 명시된 형식으로 반환DATE_FORMAT(NOW(),'%Y-%m-%d') → 2023-01-28
STR_TO_DATE(str,format)문자열을 format에 맞게 날짜로 반환STR_TO_DATE('28,1,2023','%d,%m,%Y')→2023-01-28
DATE_ADD(date, INTERVAL xx)date에 xx더한 날짜 반환DATE_ADD(NOW(), INTERVAL 10 DAY) → 2023-02-07
DATE_SUB(date, INTERVAL xx)date에 xx뺀 날짜 반환DATE_SUB(NOW(), INTERVAL 10 DAY) → 2023-01-18
EXTRACT(unit FROM date)date에서 unit 지정한 부분 반환EXTRACT(YEAR_MONTH FROM NOW())→ 202301
DATEDIFF(expr1,expr2)expr1에서 expr2 뺀 날짜 일수 반환DATEDIFF('2023-01-28','2023-01-20')→ 8
TIMESTAMPDIFF('결과값형식','날짜1','날짜2')날짜2-날짜1 반환TIMESTAMPDIFF(DAY,"2021-07-29 14:00:00" , "2021-07-29 21:00:00");→ 0

** DATE_FORMAT : Oracle DB에서는 TO_CHAR()을 사용
EX. TO_CHAR(sysdate(), 'YYYY-MM-DD')

위 함수들은 DATE 데이터타입에만 적용가능
예를들어 2023/02/09와 같은 Str 타입으로 데이터가 들어가있다면 사용할 수 없음
Str -> Date 함수로 변환 : str_to_date()

TIMESTAMPDIFF 안에 결과값 형식으로 사용할 수 있는 값

  • SECOND 초
  • MINUTE 분
  • HOUR 시
  • DAY 일
  • WEEK 주
  • MONTH 월
  • QUARTER 분기
  • YEAR 년도


### WHERE 절에서 데이터 필터링을 할 경우 "기존 컬럼을 가공하지 않고 사용하는게 좋다"

시분초까지 다 포함된 TIMESTAMP 타입의 데이터에 범위를 지정하여 조건 달 때에는
DATE나 LIKE 함수보다는 BETWEEN 사용하여 가공없이 지정하는 게 효율적

-- 올바른 예
WHERE order_date BETWEEN '2016-09-04 00:00:00' AND '2016-09-04 23:59:59'

-- 바람직 하지 않은 예
WHERE DATE(order_date) = '2016-09-04'
WHERE order_date LIKE '2016-09-04%'
profile
안녕하세요:)

0개의 댓글