< 형변환 함수 >
* TO_CHAR
숫자 타입 또는 날짜 타입의 값을 문자타입을 반환시켜주는 함수
T0_CHAR (숫자 | 날짜, [포맷])
SELECT TO_CHAR(1234) FROM DUAL; -- '1234' 로 바뀌어 있는거임
SELECT TO_CHAR(1234, '99999') FROM DUAL; -- 5칸자리 공간 확보, 오른쪽 정렬, 빈칸 공백
SELECT TO_CHAR(1234, '00000') FROM DUAL;
SELECT TO_CHAR(1234, 'L99999') FROM DUAL; -- 현재 설정된 나라(LOCAL)의 화폐 단위로 출력
SELECT TO_CHAR(1234, '$99999') FROM DUAL;
SELECT TO_CHAR(1234, 'L99,999') FROM DUAL;
SELECT EMP_NAME, TO_CHAR(SALARY, 'L999,999,999')
FROM EMPLOYEE;
날짜 타입 => 문자타입
SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE) FROM DUAL; -- 클릭해보면 다름
SELECT TO_CHAR(SYSDATE, 'HH:MI:SS') FROM DUAL; -- HH : 12시간 형식
SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') FROM DUAL; -- HH24 : 24시간 형식
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY DY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'MON, YYYY') FROM DUAL;
SELECT EMP_NAME, HIRE_DATE, TO_CHAR(HIRE_DATE, 'YYYY-MM-DD')
FROM EMPLOYEE;
날짜 타입 => 문자타입
SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE) FROM DUAL; -- 클릭해보면 다름
SELECT TO_CHAR(SYSDATE, 'HH:MI:SS') FROM DUAL; -- HH : 12시간 형식
SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') FROM DUAL; -- HH24 : 24시간 형식
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY DY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'MON, YYYY') FROM DUAL;
SELECT EMP_NAME, HIRE_DATE, TO_CHAR(HIRE_DATE, 'YYYY-MM-DD')
FROM EMPLOYEE;
-- EX) 1990년 02월 06일 형식으로
SELECT TO_CHAR(HIRE_DATE, 'YYYY년 MM월 DD일') FROM EMPLOYEE; -- 얘 안됨.. 없는 포맷 제시할때는 "" 이거로 묶기
SELECT TO_CHAR(HIRE_DATE, 'YYYY"년" MM"월" DD"일"') FROM EMPLOYEE; -- 없는 포맷 제시할때는 "" 이거로 묶기
-- 년도와 관련된 포맷
SELECT TO_CHAR(SYSDATE, 'YYYY'),
TO_CHAR(SYSDATE, 'YY'),
TO_CHAR(SYSDATE, 'RRRR'), -- RR 과 YY의 차이는 TO_DATE 에서 알아보자
TO_CHAR(SYSDATE, 'RR'),
TO_CHAR(SYSDATE, 'YEAR')
FROM DUAL;
-- 월과 관련된 포맷
SELECT TO_CHAR(SYSDATE, 'MM'),
TO_CHAR(SYSDATE, 'MON'),
TO_CHAR(SYSDATE, 'MONTH'),
TO_CHAR(SYSDATE, 'RM')
FROM DUAL;
-- 일과 관련된 포맷
SELECT TO_CHAR(SYSDATE, 'DDD'), -- 올해 기준으로 오늘이 며칠째인지
TO_CHAR(SYSDATE, 'DD'), -- 월 기준으로 오늘이 며칠째인지
TO_CHAR(SYSDATE, 'D') -- 주 기준으로 오늘이 며칠째인지
FROM DUAL;
-- 요일과 관련된 포맷
SELECT TO_CHAR(SYSDATE, 'DAY'), -- 월요일
TO_CHAR(SYSDATE, 'DY') -- 월
FROM DUAL;
* TO_DATE
숫자타입 또는 문자타입 데이터를 날짜 타입으로 변환 시켜주는 함수
TO_DATE(숫자 | 문자, [포맷])
SELECT TO_DATE(20100101) FROM DUAL;
SELECT TO_DATE(100101) FROM DUAL;
SELECT TO_DATE(070101) FROM DUAL; -- 에러
SELECT TO_DATE('070101') FROM DUAL; -- 첫글자 0인 경우는 문자타입으로 변경하고 해야함
SELECT TO_DATE('041030 143000') FROM DUAL; -- 에러
SELECT TO_DATE('041030 143000', 'YYMMDD HH24MISS') FROM DUAL; -- 포맷정해주면 됨
SELECT TO_DATE('140630', 'YYMMDD') FROM DUAL; -- 2014년
SELECT TO_DATE('980630', 'YYMMDD') FROM DUAL; -- 2098년 => 무조건 현재 세기로 반영 무조건 20 붙임
SELECT TO_DATE('980630', 'RRMMDD') FROM DUAL; -- 1998년
-- RR : 해당 두자리 년도 값이 50 미만일 경우 현재 세기 반영, 50 이상일 경우 이전세기 반영
* TO_NUMBER
문자타입의 데이터를 숫자타입으로 반환시켜주는 함수
TO_NUMBER(문자, [포맷]) => 결과값은 NUMBER 타입
SELECT TO_NUMBER('05123475') FROM DUAL; -- 0 빠져서 숫자타입으로 저장됨
SELECT '10000000' + '55000' FROM DUAL; --> 오라클에서는 자동형변환 잘 돼 있음;
SELECT '10,000,000' + '55,000' FROM DUAL; --> 오류남!! 안에 숫자만 있어야 자동형변환 된다.
SELECT TO_NUMBER('10,000,000', '99,999,999') + TO_NUMBER('55,000','99,999') FROM DUAL;