프로그래머스 SQL 풀이 오답노트(5): 날짜 포맷 변경

SeongGyun Hong·2025년 1월 6일

SQL

목록 보기
29/51

1. 기본 날짜 포맷 변경

Oracle

  • TO_CHAR: 날짜를 문자열로 변환.
    SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM DUAL;
  • TO_DATE: 문자열을 날짜로 변환.
    SELECT TO_DATE('2025-01-06 13:30:00', 'YYYY-MM-DD HH24:MI:SS') AS date_value FROM DUAL;

MS SQL Server

  • FORMAT: 날짜를 문자열로 변환.
    SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss') AS formatted_date;
  • CASTCONVERT: 문자열을 날짜로 변환.
    SELECT CAST('2025-01-06 13:30:00' AS DATETIME) AS date_value;

2. 특정 포맷의 날짜 변환

요구사항OracleMS SQL Server
YYYY-MM-DDTO_CHAR(SYSDATE, 'YYYY-MM-DD')FORMAT(GETDATE(), 'yyyy-MM-dd') 또는 CONVERT(VARCHAR, GETDATE(), 23)
YYYY/MM/DDTO_CHAR(SYSDATE, 'YYYY/MM/DD')FORMAT(GETDATE(), 'yyyy/MM/dd') 또는 CONVERT(VARCHAR, GETDATE(), 111)
MM-DD-YYYYTO_CHAR(SYSDATE, 'MM-DD-YYYY')FORMAT(GETDATE(), 'MM-dd-yyyy') 또는 CONVERT(VARCHAR, GETDATE(), 101)
DD-Mon-YYYYTO_CHAR(SYSDATE, 'DD-Mon-YYYY')FORMAT(GETDATE(), 'dd-MMM-yyyy')
HH24:MI:SSTO_CHAR(SYSDATE, 'HH24:MI:SS')FORMAT(GETDATE(), 'HH:mm:ss')
MM/DD/YYYY hh:mm:ss AM/PMTO_CHAR(SYSDATE, 'MM/DD/YYYY HH:MI:SS AM')FORMAT(GETDATE(), 'MM/dd/yyyy hh:mm:ss tt')

3. 날짜 요소 추출

Oracle

  • EXTRACT 사용.
    SELECT EXTRACT(YEAR FROM SYSDATE) AS year, EXTRACT(MONTH FROM SYSDATE) AS month, EXTRACT(DAY FROM SYSDATE) AS day FROM DUAL;

MS SQL Server

  • DATEPARTYEAR, MONTH, DAY 사용.
    SELECT DATEPART(YEAR, GETDATE()) AS year, DATEPART(MONTH, GETDATE()) AS month, DATEPART(DAY, GETDATE()) AS day;

4. 문자열을 날짜로 변환

Oracle

  • TO_DATE 사용.
    SELECT TO_DATE('2025-01-06', 'YYYY-MM-DD') AS date_value FROM DUAL;

MS SQL Server

  • CASTCONVERT 사용.
    SELECT CAST('2025-01-06' AS DATE) AS date_value;
    SELECT CONVERT(DATE, '2025-01-06', 23) AS date_value;

5. 날짜 계산 (날짜 + N일)

Oracle

  • + 연산자로 날짜 계산.
    SELECT SYSDATE + 7 AS future_date, SYSDATE - 30 AS past_date FROM DUAL;

MS SQL Server

  • DATEADD 함수 사용.
    SELECT DATEADD(DAY, 7, GETDATE()) AS future_date, DATEADD(DAY, -30, GETDATE()) AS past_date;

6. 날짜 비교

Oracle

  • 직접 비교.
    SELECT * FROM employees WHERE hire_date > TO_DATE('2025-01-01', 'YYYY-MM-DD');

MS SQL Server

  • 직접 비교.
    SELECT * FROM employees WHERE hire_date > CAST('2025-01-01' AS DATE);

7. 특정 스타일 코드 사용 (MS SQL Server 전용)

  • CONVERT 스타일 코드 활용.
코드출력 포맷예시
101MM/DD/YYYY01/06/2025
103DD/MM/YYYY06/01/2025
110MM-DD-YYYY01-06-2025
111YYYY/MM/DD2025/01/06
120YYYY-MM-DD HH:MI:SS2025-01-06 13:30:00
23YYYY-MM-DD2025-01-06

예제

SELECT CONVERT(VARCHAR, GETDATE(), 103) AS formatted_date; -- DD/MM/YYYY

8. 요일 및 월 이름 출력

Oracle

  • TO_CHAR 사용.
    SELECT TO_CHAR(SYSDATE, 'DAY') AS day_name, TO_CHAR(SYSDATE, 'MONTH') AS month_name FROM DUAL;

MS SQL Server

  • DATENAME 사용.
    SELECT DATENAME(WEEKDAY, GETDATE()) AS day_name, DATENAME(MONTH, GETDATE()) AS mon eㅏth_name;

9. JOIN: 조건에 맞는 도서와 저자 리스트 출력하기

  • Oracle
-- 코드를 입력하세요
SELECT B.BOOK_ID, A.AUTHOR_NAME, TO_CHAR(B.PUBLISHED_DATE, 'YYYY-MM-DD')
FROM BOOK B
INNER JOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE ASC;
  • MS SQL Server
-- 코드를 입력하세요
SELECT B.BOOK_ID, A.AUTHOR_NAME, FORMAT(B.PUBLISHED_DATE, 'yyyy-MM-dd')
FROM BOOK B
INNER JOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE ASC;
profile
헤매는 만큼 자기 땅이다.

0개의 댓글