[SQL] 날짜/시간 데이터 다루기 - YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, NOW, CURRENT_DATE, CURRENT_TIME
2024. 8. 18. 21:16ㆍLanguage/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
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
2-3. NOW, CURRENT_DATE, CURRENT_TIME
현재 날짜/시간, 날짜, 시간을 각각 출력하는 쿼리는 작성해보자.
SELECT NOW() '현재 날짜및시간', CURRENT_DATE '현재 날짜', CURRENT_TIME '현재 시간'
물론 해당 함수들은 조건식에도 사용이 가능하다. 테이블 컬럼의 시간정보 데이터와 비교하는 등의 방식으로도 사용될 수 있다. 하지만 현재 예제를 적용해보는 DB 데이터가 너무 예전 것이기에 간단하게 조회하는 쿼리만 예제로 작성하였다.
'Language > SQL' 카테고리의 다른 글
[SQL] 데이터 병합 - COALESCE (0) | 2024.08.20 |
---|---|
[SQL] 테이블 합치기 - JOIN (0) | 2024.08.19 |
[SQL] Query 안의 Query - SubQuery (0) | 2024.08.18 |
[SQL] 조건별 데이터 연산 - IF, CASE (0) | 2024.08.16 |
[SQL] 문자 데이터 가공 - REPLACE, SUBSTRING, CONCAT (0) | 2024.08.16 |