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의 여러가지 형 변환에 대한 추가 포스팅은 아래를 참고하세요
'프로그래밍 > SQL, Hive, SAS 관련 정보' 카테고리의 다른 글
[SQL 기초] To_date (Oracle) (0) | 2025.03.13 |
---|---|
[SQL문제풀이] Join Key의 처리 (0) | 2025.03.09 |
[SQL] Table of Contents (0) | 2025.02.24 |
[SQL 기초] 최빈값 찾아내기 (0) | 2025.01.30 |
[SQL 기초] 집계함수의 특성을 활용한 조건 별 집계 (2) | 2025.01.27 |