📚 Study/Oracle

Oracle :: 변환 함수 ( TO_CHAR(), TO_DATE(), TO_NUMBER(), EXTRACT(), TO_YMINTERVAL(), TO_DSINTERVAL() )

bono-hye 2023. 10. 24. 22:02

■ TO_CHAR(), TO_DATE(), TO_NUMBER()

- TO_CHAR()      : 숫자나 날짜 데이터를 문자 타입으로 변환시켜주는 함수 (숫자/날짜 → 문자)

- TO_DATE()       : 문자 데이터를 날짜 타입으로 변환시켜주는 함수 (문자 → 날짜)

- TO_NUMBER() : 문자 데이터를 날짜 타입으로 변환시켜주는 함수 (문자 → 숫자)

--○ TO_CHAR() 날짜형 → 문자형 
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') "COL1"    -- 2023-10-23
     , TO_CHAR(SYSDATE, 'YYYY') "COL2"          -- 2023
     , TO_CHAR(SYSDATE, 'YEAR') "COL3"          -- TWENTY TWENTY-THREE
     , TO_CHAR(SYSDATE, 'MM') "COL4"            -- 10
     , TO_CHAR(SYSDATE, 'MONTH') "COL5"         -- 10월
     , TO_CHAR(SYSDATE, 'MON') "COL6"           -- 10월
     , TO_CHAR(SYSDATE, 'DD') "COL7"            -- 23
     , TO_CHAR(SYSDATE, 'MM-DD') "COL8"         -- 10-23   
     , TO_CHAR(SYSDATE, 'DAY') "COL9"           -- 월요일
     , TO_CHAR(SYSDATE, 'DY') "COL10"           -- 월
     , TO_CHAR(SYSDATE, 'HH24') "COL11"         -- 10
     , TO_CHAR(SYSDATE, 'HH') "COL12"           -- 10
     , TO_CHAR(SYSDATE, 'HH AM') "COL13"        -- 10 오전            -- 무조건 오전이 나오거나
     , TO_CHAR(SYSDATE, 'HH PM') "COL14"        -- 10 오후            -- 무조건 오후가 나오는 것이 아님! 현재 시간에 따라 오전 / 오후가 나옴
     , TO_CHAR(SYSDATE, 'MI') "COL15"           -- 31
     , TO_CHAR(SYSDATE, 'SS') "COL16"           -- 18
     , TO_CHAR(SYSDATE, 'SSSSS') "COL17"        -- 37971
     , TO_CHAR(SYSDATE, 'Q') "COL18"            -- 4
FROM DUAL;

SELECT 10 "COL1"        --        10       숫자는 오른쪽 정렬
     , '10' "COL2"      -- 10              문자는 왼쪽 정렬
FROM DUAL;

SELECT 10 "COL1"        --        10       숫자는 오른쪽 정렬
     , '10' "COL2"      -- 10              문자는 왼쪽 정렬
FROM DUAL;

--※ 날짜나 통화 형식이 맞지 않을 경우
--   설정 값을 통해 세션을 설정할 수 있다.

ALTER SESSION SET NLS_LANGUAGE = 'KOREAN';
ALTER SESSION SET NLS_DATE_LANGUAGE = 'KOREAN';
ALTER SESSION SET MLS_CURRECNCY = '\';               -- ₩
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';


-- ○ 숫자형 → 문자형
SELECT 7 "COL1"
     , '7' "COL2"
     , TO_CHAR(7) "COL3"
FROM DUAL;
--==>> 7	7	7
--> 조회 결과가 좌측 정렬인지 우측 정렬인지 확인~!!!


SELECT '4' "COL1"
     , TO_NUMBER(4) "COL2"
     , 4 "COL3"
     , TO_CHAR('4') "COL4"
     , TO_CHAR('04') "COL5"
FROM DUAL;
--==>> 4	4	4	4	04
--> 조회 결과가 좌측 정렬인지 우측 정렬인지 확인~!!!


--○ 현재 날짜에서 현재 년도(2023)를 숫자 형태로 조회(반환)
SELECT TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY'))
FROM DUAL;
--==>> 2023 (오른쪽 정렬로 결과가 나오니 숫자 형태임!)

--○ TO_CHAR() 활용 → 형식 맞춤 표기 결과값 반환
SELECT 60000 "COL1"
     , TO_CHAR(60000, '99,999') "COL2"
     , TO_CHAR(60000, '$99,999') "COL3"
     , TO_CHAR(60000, 'L99,999') "COL4"         --> L : 언어에 맞는 통화를 반환,    ₩60,000(나라마다 통화 기호가 다르기 때문에 우선 공간을 확보해둔 것! 오른 쪽 정렬이 아닌 왼쪽 정렬이다!)
     , LTRIM(TO_CHAR(60000, 'L99,999')) "COL4"  --> 위에서 나온 공백 제거
FROM DUAL;
--==>> 60000	 60,000	 $60,000	        ₩60,000	₩60,000

 

■ EXTRACT()

- 날짜 데이터에서 원하는 데이터 (년, 월, 일)을 숫자 타입으로 추출

- 년, 월, 일 이외 다른 항목은 사용 불가!

--○ EXTRACT()
SELECT TO_CHAR(SYSDATE, 'YYYY') "COL1"      -- 2023 → 연도를 추출하여 문자 타입으로
     , TO_CHAR(SYSDATE, 'MM') "COL2"        -- 10   → 월을 추출하여 문자 타입으로
     , TO_CHAR(SYSDATE, 'DD') "COL3"        -- 23   → 일을 추출하여 문자 타입으로
     , EXTRACT(YEAR FROM SYSDATE) "COL4"    -- 2023 → 연도를 추출하여 숫자 타입으로
     , EXTRACT(MONTH FROM SYSDATE) "COL5"   -- 10   → 월을 추출하여 숫자 타입으로
     , EXTRACT(DAY FROM SYSDATE) "COL6"     -- 23   → 일을 추출하여 숫자 타입으로
FROM DUAL;
--==>> 2023	10	23	2023	10	23

 

■ TO_YMINTERVAL(), TO_DSINTERVAL()

- TO_YMINTERVAL() : 연~월 데이터 추출

- TO_DSINTERVAL() : 일~초 데이터 추출

--○ 현재 시간을 기준으로 1년 2개월 3일 4시간 5분 6초 후를 조회한다.
-- TO_YMINTERVAL(), TO_DSINTERVAL()
SELECT SYSDATE "현재 시간"
     , SYSDATE + TO_YMINTERVAL('01-02') + TO_DSINTERVAL('003 04:05:06') "연산 결과"
FROM DUAL;
--==>> 2023-10-23 11:22:25
--     2024-12-26 15:27:31