📚 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