Or04TypeConvert
/*******
# 파일명 : Or04TypeConvert.sql
# 형변환함수 / 기타함수
# 설명 : 데이터타입을 다른 타입으로 변환해야할 때 사용하는 함수와 기타함수
*******/
/*
nvl()
: null값을 다른 데이터로 변경하는 함수
사용법 : nvl(칼럼명, 대체할값)
*/
--employees 테이블 데이터 확인
select first_name, last_name, commission_pct, salary from employees;
select
first_name, last_name, salary, nvl(commission_pct, 0) AS "commission"
from employees; -null값이 0으로 대체되어 출력됨.
/*
decode()
: switch문과 비슷한 역할을 하는 함수
사용법 : decode(칼럼명, 값1, 결과1, 값2, 결과2 ........값N, 결과N, 기본값)
*/
--departments 테이블 데이터 확인
select * from departments;
--decode 함수로 각 부서의 부서명 출력
select
first_name, last_name, department_id,
decode(department_id, 10, '최고관리자', 20, '마케팅팀', 60, '전산팀',
90, '경영관리팀', '그냥팀') AS "TemName"
from employees;
/*
case()
: if-else문과 같은 역할을 하는 함수
사용법 :
case
when 조건1 then 값1
when 조건2 tehn 값2
.........
else 기본값
end
*/
select first_name, last_name, department_id,
case
when department_id=20 then '마케팅팀'
when department_id=60 then '전산팀'
when department_id=90 then '경영관리팀'
else '기본부서'
end AS "TeamName"
from employees;
/*
to_char()
: 날짜나 숫자를 문자형으로 변환할때 사용하는 함수
사용법 : to_char(숫자 or 날짜, '사진포맷/통화포맷/날짜포맷 등)
- 날짜포맷
yyyy : 4자리 연도표시
yy : 2자리 연도표시
mm : 월 표시
dd : 일 표시
mon : 월을 표시
day : 요일을 표시
dy : 요일을 약어로 표시
*/
select sysdate from dual; --sysdate : 현재 날짜와 시간을 반환해줌.
select to_char(sysdate, 'yyyy/mm/dd') AS "TODAY" from dual;
select
to_char(sysdate, 'day') as "요일표시",
to_char(sysdate, 'dy') as "요일약자로표시",
to_char(sysdate, 'mon') as "월표시",
to_char(sysdate, 'yy') as "연도2자리표시"
from dual;
--문제] 오늘은 0000년 00월 00일 00요일입니다. 를 출력하시오.
select
to_char(sysdate, '"오늘은" yyyy "년" mm "월" dd "일" dy "요일입니다".')
from dual;
/*
위와같이 문자열 사이사이에 서식문자가 들어가는 경우에
문자열을 "(더블쿼테이션)으로 묶어준다.
*/
/*
시간포맷
AM, PM : 오전, 오후를 표시
HH24 Z:시간을 24시간 형태로 표현
HH or HH12 : 시간을 12시간 형태로 표현
MI : 분을 표현
SS : 초를 표현
*/
--현재시간을 00:00:00형태로 출력
select to_char(sysdate, 'HH:MI:SS') as "TIME" from dual;
--현재시간이 오전 or 오후인지 판단하여 출력
select to_char(sysdate, 'HH AM') from dual; -- 현재 실행하고 있는 시간
select to_char(sysdate, 'HH PM') from dual; -- "03 오후" 형태로 출력됨.
-- 현재시간을 24시간 형태의 시간으로 출력
select to_char(sysdate, 'HH24') from dual; -- 오후 3시 -> 15로 출력됨.
-- 현재시간을 년/월/일/ 시:분:초 로 변환 후 출력
select to_char(sysdate, 'yyyy/mm/dd HH:MI:SS') from dual;
/*
- 숫자포맷
0 : 자리수를 나타내며 자리수가 맞지 않을 경우 0으로 채운다.
9 : 0과 동일하지만 자리수가 맞지 않아도 0으로 채우지 않는다.
L : 통화기호를 숫자앞에 표기한다.
. : 소수점을 표현한다.
, : 천 단위를 표현한다.
*/
-- 전체 4자리중 123은 숫자로 표현되고 남은 천의자리가 0으로 채워짐
select to_char(123, '0999')from dual; --0123(빈 자리가 0으로 채워짐)
-- 전체 4자리중 12는 숫자로 표현되고 남은 천, 백의자리는 0으로 채워짐
select to_char(12, '0099')from dual; --0012
select to_char(123, '9999')from dual; --0123
select to_char(123, '9999')from dual; --123
-- 세자리마다 컴마를 출력
select to_char(12345, '999,999') from dual; --12.345
select to_char(12345, '999,999,999') from dual; --12.345
--천단위마다 컴마를 표시하고 소수점도 표시
select to_char(12345, 'L999,999,99') from dual;
-- 통화단위로 $를 표시하고 컴마와 소수점 표시
select to_char(12345, '$000,999.99') from dual; -- $012,345.00
/*
to_date()
: 문자열 데이터를 날짜형으로 변환해서 출력해줌(oracle에 지정된
기본 날짜포맷으로 변환됨.
사용법 : to_date('문자열', '날짜포맷')
- 날짜포맷을 생략하면 기본형식인 yy/mm/dd 포맷으로 인식함
- 문자열의 날짜형식은 년월일 형태여야 함
- 만약 시분초가 포함되는 경우 인식하지 못하고 에러처리
- 여기서 사용되는 날짜포맷은 문자열로 전달된 인자의 포맷을 뜻함
*/
select
to_date('2017/10/24'),
to_date('20171024'),
to_date('2017-10-24')
from dual;
select to_date('24/10/2017') from dual; -- 날짜포맷을 인식하지 못해서 에러
select to_date('24/10/2017', 'dd/mm/yyyy') from dual; -- 일/월/년 포맷이라는 것을 오라클에게 알려줘서 제대로 인식함
select to_date('2017-10-24 12:00:00') from dual; -- 시간을 인식하지 못해서 에러발생
/*
to_number()
: 문자열데이터를 숫자형으로 변환해준다.
사용법 : to_number('문자열')
*/
select to_number('123') + to_number('456') from dual; --579
select '123 + 456' from dual; -- 579
/*
활용 1: 문자열 '2012/10/24'는 어떤 요일인지 변환함수를 이용해서 출력하시오.
*/
select
to_char('2012/10/24'),
to_char(to_date('2012/10/24'), 'day')
from dual;
/*
활용2 : '2013년10월24일' 은 어떤 요일이지 변환함수를 이용해서 출력하시오.
['2013년10월24일'] 자체를 인자로 쓰기
*/
select
to_char('2013/10/24'),
to_date('2013년10월24일', 'yyyy"년"mm"월"dd"일"'),
to_char(to_date('2013년10월24일', 'yyyy"년"mm"월"dd"일"'),'dy')
from dual;
/*
활용 3 : "2014-10-24 12:34:56" 이 데이터를
"0000년00월00일 0요일" 형식으로 출력해보자.
1단계 : substr('2014-10-24 12:34:56', 1,10) -> 201410-24 반환(문자열)
2단계 : to_date('2014-10-24') -> 14/10/24 반환(날짜)
3단계 : to_char(14/10/24, 'yyyy"년"mm"월"dd"일"dy"요일')
*/
select
to_char(to_date(substr('2014-10-24 12:34:56', 1,10)),'yyyy"년"mm"월"dd"일"dy"요일"')
from dual;
/*
활용4 : Employees테이블의 hire_date칼럼이 문자타입으로 "2013-03-14 12:34:56"
형태로 저장되어 있다고 가정하자. 이 칼럼에 저장된 데이터를
"2013년03월14일X요일" 형식으로 출력해보자.
출력할 칼럼은 first_name, last_name, h다.
*/ire_date 이
select
first_name, last_name,
to_char(to_date(substr(hire_date,1,10)),'yyyy"년 "mm"월 "dd"일 "day ')
from employees
where department_id=50;
'프로그래밍 > Oracle' 카테고리의 다른 글
Or06GroupBy (0) | 2017.11.15 |
---|---|
Or05Date (0) | 2017.11.15 |
Or03String (0) | 2017.11.15 |
Or02Number (0) | 2017.11.15 |
ExSchool01 (0) | 2017.11.15 |