SQL공부

ORACLE 오라클 SQL 7 - 변환함수, 날짜함수

Irene1988 2025. 1. 14. 09:25

변환함수

TO_CHAR(인자, 출력포맷) 인자(날짜, 숫자)를 문자로 변환하는 함수
TO_DATE(인자, 포맷) 문자 데이터를 날짜 데이터로 변환하는 함수
TO_NUMBER(인자, 포맷) 문자 데이터를 숫자 데이터로 변환하는 함수와

국비다닐 때 정말 이 부분은 급하게 넘어간거 같다, 나는 비록 MS SQL을 주로 사용했지만, 위의 변환함수들 은근 자주 사용했다.

왜냐하면 SQL 테이블에 저장된 데이터의 대부분의 데이터타입이 문자열이었기 때문에 연산이 필요할때는 숫자로 변환해서 연산처리를 했었다. 특히나 가장 까다로운게 바로 날짜타입... 데이터 타입이 상당히 까다로웠다.

 

이번에 열심히 강좌를 들으며, 머릿속에 개념을 정리했다.

알클님 유튜브 강의는 강력추천 한다.

https://www.youtube.com/watch?v=t90j9GAdFUo&list=PL4C2AmBC9jOYAQrvie3y5c8GN01KGq5WR&index=16

 

 

TO_CHAR(날짜, 포맷)

CC 세기
YYYY 연도(4자리)
YY 연도(2자리)
MM 월(2자리)
MON 월(언어별 월 이름의 약자 - JAN/ 1월)
MONTH 월(언어별 월 이름 - January / 1월)
DD 일 (2자리)
DDD 1년 중 몇일(3자리) [1~366]
DY 요일(언어별 요일 이름의 약자)
DAY 요일(언어별 요일 이름)
W 1년 중 몇 번째 주[1~53]
HH24 24시 기준 시간
HH 12시 기준 시간
MI
SS
AM, PM 오전, 오후

 

35. 테이블 EMPLOYEE의 FIRST_NAME과 HIRE_DATE를 검색하되 <예시>와 같이 날짜형식을 지정하는 SQL

SELECT 
    first_name AS "이름",
    TO_CHAR(hire_date,'YYYY-MM-DD (DY) HH:MI:SS') AS "입사일자"
FROM EMPLOYEES;

36. 테이블 EMPLOYEE의 FIRST_NAME과 HIRE_DATE를 검색하되 <예시>와 같이 금액형식을 지정하는 SQL

SELECT
    first_name AS "이름",
    TO_CHAR(salary,'$999,999,999') AS "급여",
    salary
FROM employees

37. 문자형으로 주어진 데이터를 날짜형으로 변환하는 SQL
예시) '20220712'

SELECT
    TO_DATE('20220712','YYYYMMDD') AS "날짜1"
    , TO_DATE('2022/07/12','YYYY/MM/DD') AS "날짜2"
    , TO_DATE('2022-07-12','YYYY-MM-DD') AS "날짜3"
    , TO_DATE('2022.07.12','YYYY.MM.DD') AS "날짜4"
FROM dual;

38. <예시> 와 같이 문자형으로 주어진 데이터를 숫자형 데이터로 변환하는 SQL
-- 예시 1,200,000

SELECT
    '1,200,000' AS "문자",
    TO_NUMBER('1,200,000','9,999,999') AS "숫자로 변환"
FROM dual;

 

날짜함수

SYSDATE 현재 날짜와 시간을 DATE 타입의 데이터로 변환하는 함수
SYSTIMESTAMP 현재 날짜와 시간을 TIMESTAMP 타입의 데이터로 변환하는 함수
ADD_MONTHS(날짜, 개월수) 해당 날짜로부터 개월 수를 더한 날짜를 변환하는 함수
MONTHS_BETWEEN(날짜1, 날짜2) 날짜1부터 날짜2 사이의 개월 수를 변환하는 함수
NEXT_DAY(날짜, 요일번호) 지정한 날짜 이후에 나오는 요일번호에 해당하는 날짜를 변환하는 함수
요일 번호: 일요일(1) ~ 토요일(7)
LAST_DAY(날짜) 지정한 날짜와 같은 달의 마지막 날짜를 반환하는 함수(월말)
LAST_DAY(날짜) 지정한 날짜와 같은 달의 마지막 날짜를 반환하는 함수(월말)
TRUNC(날짜, 날짜형식) 날짜형식 단위로 날짜 데이터를 절삭하여 반환하는 함수

 

39. <예시>와 같이 현재 날짜를 반환하는 SQL문을 작성하시오.

SELECT
    sysdate-1 AS "어제",
    sysdate AS "오늘",
    sysdate+1 AS "내일"
FROM dual;

40. <예시>와 같이 입사일자와 오늘 날짜를 계산하여 근무달수와 근속연수를 구하는 SQL

SELECT
    first_name AS "이름",
    TO_CHAR(hire_date, 'YYYY.MM.DD') AS "입사일자",
    TO_CHAR(sysdate,'YYYY.MM.DD') AS "오늘날짜",
    TRUNC(MONTHS_BETWEEN(sysdate, hire_date)) || '개월' AS "근무일수",
    TRUNC(MONTHS_BETWEEN(sysdate, hire_date) / 12) || '년' AS "근속년수"
FROM EMPLOYEES;

41.<예시>와 같이 오늘 날짜와 6개월 후의 날짜를 출력하는 SQL

오늘로부터 6개월 후의 날짜를 구하시오.

: 지정한 날짜로부터 해당 개월 수를 후의 날짜를 반환하는 함수

SELECT
    sysdate AS "오늘",
    ADD_MONTHS(sysdate,6) AS "6개월 후"
FROM dual;

42. <예시> 와 같이 오늘 날짜와 오늘 이후 돌아오는 토요일의 날짜를 출력하는 SQL문

SELECT
    sysdate AS "오늘"
    , NEXT_DAY(sysdate, 7) AS "다음 토요일"
FROM dual;
SELECT NEXT_DAY(sysdate, 2) AS "다음 월요일"
    , NEXT_DAY(sysdate, 3) AS "다음 화요일"
    , NEXT_DAY(sysdate, 4) AS "다음 수요일"
    , NEXT_DAY(sysdate, 5) AS "다음 목요일"
    , NEXT_DAY(sysdate, 6) AS "다음 금요일"
    , NEXT_DAY(sysdate, 7) AS "다음 토요일"
    , NEXT_DAY(sysdate, 1) AS "다음 일요일"
FROM dual;

43. 오늘 날짜와 해당 월의 월초, 월말 일자를 구하시오.

월초: TRUNC(날짜, 'MM')

월말: LAST_DAY(날짜)

SELECT
    sysdate AS "오늘날짜"
    , TRUNC(sysdate, 'MM') AS "월초"
    , LAST_DAY(sysdate) AS "월말"
FROM dual;

 

 

 

*블로그의 내용은 알클님 강의를 기반으로 작성되었습니다!