21. 변환 함수

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

 

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

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

 

날짜형 → 문자형

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD')  -- 2022-02-22 (이건 문자형임)
     , TO_CHAR(SYSDATE, 'YYYY')        -- 2022
     , TO_CHAR(SYSDATE, 'YEAR')        -- TWENTY TWENTY-TWO
     , TO_CHAR(SYSDATE, 'MM')          -- 02
     , TO_CHAR(SYSDATE, 'MONTH')       -- 2월
     , TO_CHAR(SYSDATE, 'MON')         -- 2월
     , TO_CHAR(SYSDATE, 'DD')          -- 22
     , TO_CHAR(SYSDATE, 'MM-DD')       -- 02-22
     , TO_CHAR(SYSDATE, 'DAY')         -- 화요일
     , TO_CHAR(SYSDATE, 'DY')          -- 화
     , TO_CHAR(SYSDATE, 'HH24')        -- 16
     , TO_CHAR(SYSDATE, 'HH')          -- 04
     , TO_CHAR(SYSDATE, 'HH AM')       -- 04 오후
     , TO_CHAR(SYSDATE, 'HH PM')       -- 04 오후
-- AM이든 PM이든 지금 기준으로 출력
     , TO_CHAR(SYSDATE, 'MI')          -- 19
     , TO_CHAR(SYSDATE, 'SS')          -- 45
     , TO_CHAR(SYSDATE, 'SSSS')        -- 59369
-- 오늘 날짜의 자정부터 지금까지 흘러온 전체 초
     , TO_CHAR(SYSDATE, 'Q')           -- 1
  FROM DUAL; 
-- 다 문자형
SELECT 7             -- 숫자 우측 정렬
     , '7'           -- 문자 좌측 정렬
     , TO_CHAR(7)    -- 좌측 정렬
FROM DUAL;
--> 조회 결과 정렬 확인하기

 

EXTRACT()

SELECT TO_CHAR(SYSDATE, 'YYYY')    -- 2022(문자형) → 연도를 추출하여 문자 타입으로 변환
     , TO_CHAR(SYSDATE, 'MM')      -- 02(문자형) → 월을 추출하여 문자 타입으로 반환
     , TO_CHAR(SYSDATE, 'DD')      -- 22(문자형) → 일을 추출하여 문자 타입으로 반환
     , EXTRACT(YEAR FROM SYSDATE)  -- 2022(숫자형) → 연도를 추출하여 숫자 타입으로 반환
     , EXTRACT(MONTH FROM SYSDATE) -- 2 (숫자형) → 월을 추출하여 숫자 타입으로 반환
, EXTRACT(DAY FROM SYSDATE)        -- 22 (숫자형) → 일을 추출하여 숫잩 타입으로 반환
FROM DUAL;
--> 연, 월, 일 이외의 다른 항목은 불가~!!

 

TO_CHAR() 항목 → 형식 맞춤 표기 결과값 반환

SELECT 60000 
     , TO_CHAR(60000, '99,999') 
     , TO_CHAR(60000, '$99,999') 
     , TO_CHAR(60000, 'L99,999')  -- (기본 통화가 단일 특수 기호로 표현되지 않는 기호를 위해 공간을 많이 확보)
     , LTRIM(TO_CHAR(60000, 'L99,999')) -- 이렇게 하면 공백 지울 수 있음
FROM DUAL; -- 모두 좌측 정렬임
--==>> 60000	 60,000	 $60,000	        ₩60,000	₩60,000

 

세션 설정 변경

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

(앞에서 배운 방식)

 

현재 시간을 기준으로 1일 2시간 3분 4초 후를 조회한다.

SELECT SYSDATE "현재 시간"
     , SYSDATE + 1 + (2/24) + (3/(24*60)) + (4/(24*60*60)) "1일2시간3분4초후"
FROM DUAL;
--==>> 2022-02-22 16:48:13
-- 2022-02-23 18:51:17

(TO_YMINTERVL(), TO_DSINTERVAL() 사용해서)

현재 시간을 기준으로 1년 2개월 3일 4시간 5분 6초 후를 조회한다. TO_YMINTERVL(), TO_DSINTERVAL() -- (앞에는 년, 월 뒤에는 일 초 단위 함수)

SELECT SYSDATE "현재 시간"
     , SYSDATE + TO_YMINTERVAL('01-02') + TO_DSINTERVAL('003 04:05:06') "연산 시간"  -- (매개변수는 문자타입)
FROM DUAL;
--==>>
/*
2022-02-22 17:04:53	
2023-04-25 21:09:59
*/

 

 

 

 

 

 

 

 

 

 

 

 

 


https://www.instagram.com/p/CaoGukDJIdz/?utm_source=ig_web_copy_link

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


 

'SQL > Oracle' 카테고리의 다른 글

23. VIEW  (0) 2022.03.12
22. CASE 구문(조건문, 분기문)  (0) 2022.03.12
20. 날짜 연산 함수  (0) 2022.03.12
19. 숫자 처리 함수  (0) 2022.03.12
SQL Developer theme(dracula) 적용  (0) 2022.03.11