SQL 함수 - 변환 함수

이승범·2024년 9월 15일

암시적 형 변환
Varchar2, char -> NUMBER
Varchar2, char -> DATE
NUMBER -> Varchar2
DATE -> Varchar2

select 30 +'20' from dual;
-- 문자가 숫자로 자동 형 변환
 -- 50
select 30 || '20' from dual;
-- 숫자가 문자로 자동 형 변환
-- 3020

통화기호, 날짜 등 출력 형식

-- 통화기호, 날짜 등의 출력 형식 확인
select * from nls_session_parameters;

-- 국가별 설정 변경 :  KOREAN으로 변경
ALTER SESSION SET nls_language = 'korean';

-- 통화기호 변경 : ₩로 변경
ALTER SESSION SET nls_currency = '\';

-- 날짜 출력 형식 변경 : KOREAN 형식으로 변경
ALTER SESSION SET nls_date_language = 'korean';

-- 날짜 출력 형식 변경(디폴트 : RR/MM/DD)
ALTER SESSION SET nls_date_format = 'YYYY-MM-DD';

숫자를 fmt 형식을 이용하여 varchar2로 변환

select 12345 from dual;
select to_char(12345, '999,999') from dual; -- 12,345
select to_char(12345, '9,999') from dual; -- ###### (자리가 부족함)
select to_char(12345, '9,999,999') from dual; -- (공백)12,345
select to_char(12345, '0,999,999') from dual; -- 0,012,345
select to_char(12.67, '99') from dual; -- 13 (소숫점 반올림)
select to_char(12.37, '99') from dual; -- 12 (소숫점 반올림)
select to_char(12.67, '99.9') from dual; -- 12.7(소숫점 반올림)
select to_char(0.03, '99.9') from dual; -- .0
select to_char(0.03, '90.9') from dual; -- 0.0
select to_char(35, '90.9') from dual; -- 35.0
select to_char(0, '99') from dual; -- 0
        
select to_char(-1234, '99999') from dual; -- -1234
select to_char(1234, '99999mi') from dual; -- -1234
select to_char(-1234, '99999mi') from dual; -- 1234-
select to_char(1234, '99999pr') from dual; -- -1234
select to_char(-1234, '99999pr') from dual; -- <1234>

select to_char(1234.345, '9.999eeee') from dual; -- 1.234e+03
select to_char(1234, '99999v9999') from dual; -- 12340000
select to_char(1234, 'L9,999,999') from dual; -- \1,234 (통화기호)
select to_char(1234, '9,999,999')||'원' from dual; -- 1,234원

date 타입을 fmt 형식의 varchar2로 변환
fmt를 생략하면 기본 날짜 형식

select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
select sysdate, to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS day') FROM DUAL;
select sysdate, to_char(sysdate, 'YYYY"년"MM"월"DD"일"') FROM DUAL;

select sysdate, to_char(sysdate, 'dd "of" month') FROM DUAL;
select sysdate, to_char(sysdate, 'mon dd day') FROM DUAL;
select sysdate, to_char(sysdate, 'mon dd day', 'nls_date_language=american') FROM DUAL;
select sysdate, to_char(sysdate, 'mon dd day', 'nls_date_language=korean') FROM DUAL;	

TO_TIMESTAMP 다양한 사용 예시

-- 이번달 시작 날짜(현재년-현재월-1일 0시 0분 0초)
-- select to_timestamp(sysdate-8 ,'YYYY-MM-DD HH24:MI:SS') from dual;
select to_char(trunc(sysdate, 'mm'), 'YYYY-MM-DD HH24:MI:SS') from dual;
      
-- 다음달 시작 날짜(다음달 1일 0시 0분 0초)
-- select (to_timestamp(add_month(sysdate-8) ,'YYYY-MM-DD HH24:MI:SS')) from dual;
select to_char(trunc(add_months(sysdate, 1), 'mm'), 'YYYY-MM-DD HH24:MI:SS') from dual;
      
-- 다음달 오늘(다음달 오늘 현재 시,분,초)
-- select to_timestamp((add_months(sysdate, 1, 'YYYY-MM-DD HH24:MI:SS')0 from dual;
select to_char(add_months(sysdate, 1), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
      
-- 올해 시작 날짜(현재년-1월-1일 0시 0분 0초)
select to_char(TRUNC(sysdate, 'YYYY'), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
select to_char(TRUNC(sysdate, 'YEAR'), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
      
-- 일년 전 시작 날짜
SELECT TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE, -12), 'DD'), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
     
-- 일년 전 오늘 시작 날짜
SELECT TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE, -12), 'YEAR'), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
 
profile
creative

0개의 댓글