[SQL] 날짜/시간 데이터 다루기 - YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, NOW, CURRENT_DATE, CURRENT_TIME

2024. 8. 18. 21:16Language/SQL

 SQL 에서는 날짜 데이터를 어떻게 다룰까? 지금까지 학습을 하면서, 분명 보이는 것은 문자열 보이지만 실제로 'datetime' 타입인 경우를 많이 접할 수 있었다. 자연스레 'datetime' 에서 '원하는 값만 뽑아 쓸 수 없을까?' 라는 생각이 들었고 해당 내용을 따로 찾아 이렇게 정리하게 되었다. 날짜 및 시간 데이터를 다루는 함수들은 많지만 가장 기본적인 함수들에 대해서 다루었다.

 

0. 데이터 타입(자료형)

 날짜 및 시간을 표현하는 데이터 타입에는 여러가지가 있지만 그 중 가장 기본적이고 보편적으로 사용하는 타입들에 대해 이야기 해보자.

  • DATE : 날짜 정보를 갖는 타입이다. 'YYYY-MM-DD' 형식을 사용한다.
  • TIME : 시간 정보를 갖는 타입이다. 'HH:MM:SS' 형식을 사용한다.
  • DATETIME : DATE 와 TIME 이 합쳐진 타입이다. 'YYYY-MM-DD HH:MM:SS' 형식을 사용한다. 

 

1. 기본 문법

// 대상 컬럼이 'DATETIME' 타입이라 가정하고 작성
SELECT 컬럼명,
       YEAR(컬럼명) 별명,
       MONTH(컬럼명) 별명,
       DAY(컬럼명) 별명,
       HOUR(컬럼명) 별명,
       MINUTE(컬럼명) 별명,
       SECOND(컬럼명) 별명,
       NOW() 별명,
       CURRENT_DATE 별명,
       CURRENT_TIME 별명
FROM 테이블명

 

적어놓는 것을 SELECT 절에 몰아 적어두었지만, 해당 함수들은 WHERE 절에도 사용이 가능하다.

 

 

2. 사용 예제

2-1. YEAR, MONTH, DAY

 'orders' 테이블의 레코드에서 주문이 들어온 연도, 월, 일을 문자로 출력하는 쿼리를 작성해보자.

SELECT order_no, created_at,
       CONCAT(YEAR(created_at), '년 ', MONTH(created_at), '월 ', DAY(created_at), '일') '주문일자'
FROM orders

DATETIME 에서 년월일 정보 추출

 

2-2. HOUR, MINUTE, SECOND

 'orders' 테이블에서 8월달 주문들의 주문 시간을 출력하는 쿼리를 작성해보자.

SELECT order_no, created_at,
       CONCAT(HOUR(created_at), '시 ', MINUTE(created_at), '분 ', SECOND(created_at), '초') '주문시간'
FROM orders
WHERE MONTH(created_at) = 8

8월달 주문시간 확인 결과

 

2-3. NOW, CURRENT_DATE, CURRENT_TIME

 현재 날짜/시간, 날짜, 시간을 각각 출력하는 쿼리는 작성해보자.

SELECT NOW() '현재 날짜및시간', CURRENT_DATE '현재 날짜', CURRENT_TIME '현재 시간'

현재 날짜 및 시간 조회

 

물론 해당 함수들은 조건식에도 사용이 가능하다. 테이블 컬럼의 시간정보 데이터와 비교하는 등의 방식으로도 사용될 수 있다. 하지만 현재 예제를 적용해보는 DB 데이터가 너무 예전 것이기에 간단하게 조회하는 쿼리만 예제로 작성하였다.