D05-DB 오라클 형변환 함수

jin·2022년 8월 19일
0

형 변환 함수

각 데이터에 지정된 자료형을 바꿔주는 함수
1) 자동 형 변환(implicit type conversion)
2) 명시적 형 변환(explicit type conversion)

1. TO_CHAR

1) 숫자 또는 날짜 데이터 → 문자 데이터
2) TO_CHAR([날짜데이터], [출력되길 원하는 문자 형태])
3) 형식문자의 종류
4) 기본 형식
TO_CHAR([날짜 데이터], [출력되길 원하는 문자 형태],
'NLS_DATE_LANGUAGE = language(선택)')
5) 숫자 데이터를 문자 데이터로 변환하는 형식의 종류

-- [개념 1-1] 자동 형 변환(implicit type conversion)
-- [실습 1-1] 숫자와 문자열(숫자)을 더하여 출력하기
Select 100 + '50' From dual;
-- [실습 1-2] SYSDATE 날짜 형식 지정하여 출력하기
-- 연/월/일 시:분:초
Select to_char(sysdate, 'YYYY/MM/DD HH:MI:SS') From dual;
-- [실습 1-3] 월과 요일을 다양한 형식으로 출력하기
Select to_char(sysdate, 'mm') as mm,
	to_char(sysdate, 'mon') as mon,
	to_char(sysdate, 'month') as month, 
	to_char(sysdate, 'dd') as dd,
	to_char(sysdate, 'dy') as dy,
	to_char(sysdate, 'day') as day
From dual;
-- [실습 1-4] 여러 언어로 날짜(월) 출력하기
Select to_char(sysdate, 'mm') as mm,
	to_char(sysdate, 'MON', 'NLS_DATE_LANGUAGE  = KOREAN') AS  MON_KOR,	
	to_char(sysdate, 'MON', 'NLS_DATE_LANGUAGE = JAPANESE') AS MON_JPN,
	to_char(sysdate, 'MON', 'NLS_DATE_LANGUAGE = ENGLISH') AS MON_ENG,
	to_char(sysdate, 'MONTH', 'NLS_DATE_LANGUAGE = KOREAN') AS MONTH_KOR,
	to_char(sysdate, 'MONTH', 'NLS_DATE_LANGUAGE = JAPANESE') AS MONTH_JPN,
	to_char(sysdate, 'MONTH', 'NLS_DATE_LANGUAGE = ENGLISH') AS MONTH_ENG
From dual;
-- [실습 1-4] 여러 언어로 날짜(요일) 출력하기
Select to_char(sysdate, 'dd') as dd,
	to_char(sysdate, 'dd', 'NLS_DATE_LANGUAGE = KOREAN') as dd_kor,
	to_char(sysdate, 'dd', 'NLS_DATE_LANGUAGE = JAPANESE') as dd_jpn,
	to_char(sysdate, 'dd', 'NLS_DATE_LANGUAGE = ENGLISH') as dd_eng,
	to_char(sysdate, 'day', 'NLS_DATE_LANGUAGE = KOREAN') as day_kor,
	to_char(sysdate, 'day', 'NLS_DATE_LANGUAGE = JAPANESE') as day_jpn,
	to_char(sysdate, 'DAY', 'NLS_DATE_LANGUAGE = ENGLISH') as day_eng, -- DAY가 소문자면 소문자로 출력
From dual;
-- [실습 1-5] SYSDATE 시간 형식 지정하여 출력하기
Select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') From dual;
Select to_char(sysdate, 'YYYY-MM-DD HH:MI:SS AM') From dual;
-- [실습 1-6] 여러 가지 숫자 형식을 사용하여 급여 출력하기
Select sal, to_char(sal, '$999,999') as sal_$,
	to_char(sal, 'L999,999') as sal_L,
	to_char(sal, '999,999.00') as sal_L1,
	to_char(sal, '000,999,999.00') as sal_L2,
	to_char(sal, '000999999.99') as sal_L3,
	to_char(sal, '999,999,00') as sal_L4
From emp; 

2. TO_NUMBER

1)문자 데이터 → 숫자 데이터
2) TO_NUMBER([문자 데이터], [인식될 숫자형태])

-- [실습 2-1] 문자 데이터와 숫자 데이터를 연산하여 출력하기
Select 1300 - '1500', '1300' + 1500
From dual;
-- [실습 2-2] 문자 데이터를 숫자 형태로 강제로 인식시켜주는 TO_NUMBER
Select to_number('1,300', '999,999'), 
	to_number('1,500', '999,999'),
	to_number('1,300', '999,999') - to_number('1,500', '999,999')
From dual;

3. TO_DATE

1) 문자 데이터 → 날짜 데이터
2) TO_DATE([문자열 데이터], [인식될 날짜형태])

-- [실습 3-1] TO_DATE 함수로 문자 데이터를 날짜 데이터로 변환하기
Select to_date('2018-07-01', 'YYYY-MM-DD') as to_date_1,
	to_date('20190105', 'YYYY-MM-DD') as to_date_2
From dual;
-- [실습 3-2] 1981년 6월 1일 이후에 입사한 사원 정보 출력하기
Select * From emp
Where hiredate > to_date('19810601', 'YYYY-MM-DD');
-- [문제 1] 1980년 10월 15일 이후에 입사한 사원 출력하기
Select * From emp
Where hiredate >= to_date('19801015', 'YYYY-MM-DD');
-- 날짜 포맷 변경 (YYYY-MM-DD)
Select to_char(sysdate, 'YYYYMMDD'),
	to_char(sysdate, 'YYYY/MM/DD'),
	to_char(sysdate, 'YYYY-MM-DD'),
	to_char(sysdate, 'YYYY-MM-DD HH:MI:SS')
From dual;

--숫자의 천 단위 콤마 찍기
Select to_char(12345, 'FM999,999'),
	to_char(123456780, 'FM999,999,999'),
	to_char(123467, 'FML999,999')
From dual;
--지정한 길이 만큼 "0"으로 채우기
Select 123, to_char(123, 'FM00000')
From dual;
--날짜의 "0" 없애기
Select to_char(sysdate, 'MM/DD'), to_char(sysdate, 'FMMM/DD')
From dual;
--임의의 구분자로 날짜 형식 만들기
Select to_char(sysdate, '""YYYY"년 "MM"월 "DD"일"'),
	to_char(sysdate, '""HH24"시 "MI"분 "SS"초"')
From dual;
--시간의 오전, 오후 값 반환
Select to_char(sysdate, 'AM'),
	to_char(sysdate, 'AM HH:MI:SS'),
	to_char(sysdate, 'YYYY-MM-DD AMHH:MI:SS')
From dual;
--날짜의 요일 반환
Select to_char(sysdate, 'D'),
	to_char(sysdate, 'DY'),
	to_char(sysdate, 'DAY')
From dual;
--1년기준 몇일, 몇주, 분기 반환
Select to_char(sysdate, 'DDD'),
	to_char(sysdate, 'WW'),
	to_char(sysdate, 'Q')
From dual;
--간편한 날짜 변환
Select to_char(sysdate, 'MON'),
	to_char(sysdate, 'DL')
From dual;

0개의 댓글