본문 바로가기
프로그래밍/SQL, Hive, SAS 관련 정보

[SQL 기초] 날짜형식 연/월/일

by TrillionNT 2025. 2. 26.

2025.02.24 - [프로그래밍/SQL, Hive, SAS 관련 정보] - [SQL] Table of Contents


날짜요소 추출

(1) 공통방법: Extract함수를 활용하면 됩니다. 

SELECT 
  EXTRACT(YEAR FROM date_column) AS year,
  EXTRACT(MONTH FROM date_column) AS month,
  EXTRACT(DAY FROM date_column) AS day
FROM your_table;
(SELECT title AS results
FROM MovieRating JOIN Movies USING(movie_id)
WHERE EXTRACT(YEAR_MONTH FROM created_at) = 202002
GROUP BY title
ORDER BY AVG(rating) DESC, title
LIMIT 1)

(2) Oracle을 제외한 DBMS에서는 간단히 아래와 같이 하면 됩니다. 

SELECT
  YEAR(date_column) AS year,
  MONTH(date_column) AS month,
  DAY(date_column) AS day
FROM your_table;
SELECT order_id, order_date
FROM orders
WHERE YEAR_MONTH(order_date) = '202403';

 

그런데, 이런식으로 추출해내면 날짜 요소를 따로따로 추출해야하고 한자리 값(예: 3월)일 때는 앞에 0도 사라집니다. 그래서 Oracle에서는 목적에따라 TO_CHAR 함수를 사용하기도 합니다. 곧바로 우리가 원하는 형식의 문자열로 바꿔주니까요

더보기
+--------------------+
|   date_column     |
+--------------------+
| 2024-03-09 15:30:45 |
| 2023-07-25 08:15:20 |
| 2022-12-31 23:59:59 |
+--------------------+
SELECT 
  TO_CHAR(date_column, 'YYYY') AS year,
  TO_CHAR(date_column, 'MM') AS month,
  TO_CHAR(date_column, 'DD') AS day,
  TO_CHAR(date_column, 'HH12') AS hour12,
  TO_CHAR(date_column, 'HH24') AS hour24,
  TO_CHAR(date_column, 'YYYY-MM-DD') AS full_date
FROM your_table;
+------+-------+----+--------+--------+------------+
| year | month | day | hour12 | hour24 | full_date  |
+------+-------+----+--------+--------+------------+
| 2024 | 03    | 09 | 03     | 15     | 2024-03-09 |
| 2023 | 07    | 25 | 08     | 08     | 2023-07-25 |
| 2022 | 12    | 31 | 11     | 23     | 2022-12-31 |
+------+-------+----+--------+--------+------------+

 

내친 김에 꼭 날짜와 연관이 있는 것은 아니지만 To_char의 함수의 기능을 조금 더 정리하고 가겠습니다. 

 

FM (Fill mode) : 가끔 숫자에서 자리수를 일정하게 맞춰주어야 할 때가 있습니다. 예를 들어서 저 같은 경우에는 월, 일이 있을 때 이걸 항상 2자리 수로 맞춰주곤 하는데요. (예: 12월 > '12', 3월 > '03') 파이썬에서 zfill과 같은 기능이라고 보시면 되겠네요. 

FM _ _ _ _ . _ _ 이런식으로 to_char의 arugment를 주면 저 자리수에 맞춘 형식을 리턴합니다. _ 자리에 0이 들어가느냐 9가 들어가느냐에 따라 다른 점은 값이 없을 경우 표시하지 않을 것이냐 (9) 값이 없으면 0으로 처리할 것이냐 (0)의 옵션을 주는 것입니다. 그래서 예를 들어 아래와 같은 코드를 실행시키면

SELECT TO_CHAR(78.90, 'FM990.99')  AS formatted_1,  -- 78.90
       TO_CHAR(5.678, 'FM9990.999') AS formatted_2,  -- 5.678
       TO_CHAR(12345.6, 'FM99990.9') AS formatted_3  -- 12345.6
FROM dual;
+-------------+-----------+-------------+
| formatted_1 | formatted_2 | formatted_3 |
+-------------+-----------+-------------+
| 78.90       | 5.678     | 12345.6     |
+-------------+-----------+-------------+

 

와 같은 결과가 나옵니다.

 

Oracle/MySQL의 여러가지 형 변환에 대한 추가 포스팅은 아래를 참고하세요

2025.03.22 - [분류 전체보기] - [SQL기초] 형 변환