본문 바로가기
Study/SQL

6.형변환함수

by 로롤로롱 2023. 4. 28.

/*
<형변환함수>
1) TO_CHAR(날짜|숫자[,포맷])
    - 날짜 숫자 타입의 데이터를 문자 타입으로 변환 후 반환
*/
-- 숫자 -> 문자
SELECT TO_CHAR(1234) FROM DUAL;
-- 9 : 6칸의 공간을 확보 후 오른쪽 정렬 빈칸은 공백으로 채움
SELECT TO_CHAR(1234,'999999') FROM DUAL;
-- 0 : 빈공간을 0으로 채워줌
SELECT TO_CHAR(1234,'000000') FROM DUAL;
-- L : 현재 설정된 나라(LOCAL)의 화폐단위를 출력
SELECT TO_CHAR(1234567,'L9999999') FROM DUAL;
-- , : 입력한 숫자보다 지정되는 포맷의 길이가 길어야함
SELECT TO_CHAR(1234567,'L999,999,999') FROM DUAL;

SELECT emp_name, TO_CHAR(salary,'999,999') AS 급여
FROM emp
ORDER BY salary;

-- 날짜 -> 문자
/*
YYYY : 년도 4자리
YY : 년도 2자리
MM : 월을 숫자로
MON : 월을 알파벳으로
DAY : 요일 표현
DD : 요일 숫자
DY : 요일의 약어
DDD : 1년을 기준으로 며칠째인지
DD : 1달을 기준으로 며칠째
D : 1주를 기준으로 며칠쨰
*/
SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YY-MM-DD DAY') FROM DUAL;

SELECT * FROM dateex;

-- 일에 대한 포맷 
SELECT TO_CHAR(SYSDATE, 'DDD'),  TO_CHAR(SYSDATE, 'DD'),  TO_CHAR(SYSDATE, 'D') FROM DUAL;

SELECT emp_name, TO_CHAR(hire_date, 'YYYY-MM-DD (DY)')
FROM emp
ORDER BY hire_date;

-- 문자를 넣을 땐 ""
SELECT emp_name, TO_CHAR(hire_date, 'YYYY"년"MM"월"DD"일"(DY)')
FROM emp
ORDER BY hire_date;

/*
TO_DATE(숫자|문자[,포맷])
    - 숫자 또는 문자형 데이터를 입력받아서 날짜 타입으로 변환해서 반환
    - 반환타입 : DATE
*/
-- 숫자 -> 날짜
SELECT TO_DATE(20230412) FROM DUAL;
SELECT TO_DATE(20230412114110) FROM DUAL;
-- 문자 -> 날짜
SELECT TO_DATE('2023/04/12') FROM DUAL;
SELECT TO_DATE('23/04/12', 'YY/MM/DD') FROM DUAL;

/*
날짜데이터 + 숫자 : 숫자만큼 이후의 날짜
날짜데이터 - 숫자 : 숫자만큼 이전의 날짜
날짜데이터 - 날짜데이터 : 두 날짜 데이터 간의 일수차이
날짜데이터 + 날짜데이터 : 지원X
*/
-- 100일 후 
SELECT (SYSDATE+100) FROM DUAL;
-- D-DAY(2023-07-21)
SELECT TO_DATE(20230721)-TRUNC(SYSDATE,'DD')||'일' AS "D-DAY" FROM DUAL;
-- 어제 오늘 내일
SELECT TO_CHAR((SYSDATE-1), 'YY/MM/DD') 어제, TO_CHAR(SYSDATE, 'YY/MM/DD') 오늘,  TO_CHAR(SYSDATE+1, 'YY/MM/DD') 내일 FROM DUAL;
-- 지난달 이번달 다음달
SELECT TRUNC(ADD_MONTHS(SYSDATE, -1),'DD') 지난달,TRUNC(SYSDATE,'DD') 이번달, TRUNC(ADD_MONTHS(SYSDATE, 1),'DD') 다음달 FROM DUAL; 
-- 작년 올해 내년
SELECT TRUNC(ADD_MONTHS(SYSDATE, -12),'DD') 작년,TRUNC(SYSDATE,'DD') 올해, TRUNC(ADD_MONTHS(SYSDATE, 12),'DD') 내년 FROM DUAL; 

--emp 테이블 입사일 조회
SELECT emp_name, TO_CHAR(hire_date, 'YYYY/MM/DD') AS 입사일
FROM emp
WHERE hire_date>=TO_DATE(20071111) 
ORDER BY hire_date;

-- 숫자와 연산시 숫자로 변환하여 연산, 자동형변환
SELECT 123+'1234' FROM DUAL;
-- 숫자로 변환이 안될경우 수치 부적합 오류
SELECT 123+'1234a' FROM DUAL;

/*
3) TO_NUMBER(컬럼|문자열[,포멧])
    - 문자 타입의 데이터를 숫자 타입으로 변환
    - 변환타입 : NUMBER
*/
-- 문자는 왼쪽 정렬, 숫자는 오른쪽 정렬
-- 변환이 안되면 오류
SELECT '1234', 1234, TO_NUMBER('1234')
FROM DUAL;
-- 포멧넣어서 변환
SELECT TO_NUMBER('10,000,000','999,999,999') + TO_NUMBER('10,000,000','999,999,999') FROM DUAL;

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

8.선택함수  (0) 2023.04.30
7.NULL처리 함수  (0) 2023.04.29
5.날짜함수  (0) 2023.04.27
4.숫자 함수  (0) 2023.04.26
3.문자열 함수  (0) 2023.04.25

댓글