[SQL] 030. 문자형으로 데이터 유형 변환하기

Updated:

초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.

오라클 SQL을 기반으로 합니다.

실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.


TO_CHAR는 날짜형, 숫자형 데이터를 문자형 데이터로 변환 한다.

[예시]

HIREDATE(입사일자)로 부터 연도, 월, 일, 요일을 분리한다.

SAL(월급)은 천 단위당 콤마를 표시해서 백 만 단위까지 출력한다.

숫자 9는 0~9까지 어떤 숫자도 상관 없음을 의미하며 자릿수 만큼 기입한다.

-- 날짜 출력 포맷 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'RRRR-MM-DD';
-- 요일 출력 포맷 변경
ALTER SESSION SET NLS_DATE_LANGUAGE = KOREAN;

-- 입사일을 분리, 월급 천 단위로 출력
SELECT ENAME, HIREDATE, 
TO_CHAR(HIREDATE,'YYYY') AS 연도,
TO_CHAR(HIREDATE,'MM') AS ,
TO_CHAR(HIREDATE,'DD') AS ,
TO_CHAR(HIREDATE,'DAY') AS 요일,
TO_CHAR(SAL, '9,999,999') AS 월급
FROM EMP;

[결과]

월급은 TO_CHAR로 문자형으로 변경되어서 왼쪽으로 정렬되어 나타난다.

ENAME HIREDATE 연도 요일 월급
KING 1981-11-17 1981 11 17 화요일 5,000
BLAKE 1981-05-01 1981 05 01 금요일 2,850
CLARK 1981-05-09 1981 05 09 토요일 2,450
JONES 1981-04-01 1981 04 01 수요일 2,975
MARTIN 1981-09-10 1981 09 10 목요일 1,250
ALLEN 1981-02-11 1981 02 11 수요일 1,600
TURNER 1981-08-21 1981 08 21 금요일 1,500
JAMES 1981-12-11 1981 12 11 금요일 950
WARD 1981-02-23 1981 02 23 월요일 1,250
FORD 1981-12-11 1981 12 11 금요일 3,000
SMITH 1980-12-11 1980 12 11 목요일 800
SCOTT 1982-12-22 1982 12 22 수요일 3,000
ADAMS 1983-01-15 1983 01 15 토요일 1,100
MILLER 1982-01-11 1982 01 11 월요일 1,300

[예시2]

날짜 컬럼에서 연도/월/일 등을 분리할 때 EXTRACT도 사용 가능하다.

-- 입사일 분리2 EXTRACT
SELECT ENAME, 
EXTRACT(YEAR FROM HIREDATE) AS 연도,
EXTRACT(MONTH FROM HIREDATE) AS ,
EXTRACT(DAY FROM HIREDATE) AS 
FROM EMP;

[결과2]

ENAME 연도
KING 1981 11 17
BLAKE 1981 5 1
CLARK 1981 5 9
JONES 1981 4 1
MARTIN 1981 9 10
ALLEN 1981 2 11
TURNER 1981 8 21
JAMES 1981 12 11
WARD 1981 2 23
FORD 1981 12 11
SMITH 1980 12 11
SCOTT 1982 12 22
ADAMS 1983 1 15
MILLER 1982 1 11

[예시3]

다음 예시는 L을 사용해서 SAL(월급)을 통화 형태로 출력한다.

그리고 TO_CHAR를 이용해서 WHERE절에 조건을 추가한다.

-- L을 붙이면 통화 형태로 출력 가능
-- WHERE절 활용 입사년도가 1981년인 사원
SELECT ENAME, HIREDATE, TO_CHAR(SAL, 'L999,999') AS 월급
FROM EMP
WHERE TO_CHAR(HIREDATE,'YYYY') = '1981';

[결과3]

ENAME HIREDATE 월급
KING 1981-11-17 $5,000
BLAKE 1981-05-01 $2,850
CLARK 1981-05-09 $2,450
JONES 1981-04-01 $2,975
MARTIN 1981-09-10 $1,250
ALLEN 1981-02-11 $1,600
TURNER 1981-08-21 $1,500
JAMES 1981-12-11 $950
WARD 1981-02-23 $1,250
FORD 1981-12-11 $3,000

Tags:

Categories:

Updated:

Leave a comment