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
TAGS.

Comments