Itwill 학습내용 정리/1. SQL

2.4 (단일행 함수) 변환 함수

cannonvirus 2019. 4. 18. 13:00


※ EMP 테이블 구조


 

※ 변환 함수

to_char 문자형 데이터로 변환
to_number 숫자형 데이터로 변환
to_date 날짜형 데이터로 변환
명시적 형변환 위의 형변환 함수를 사용
암시적 형변환 오라클이 자동으로 형변환을 수행하는 것

 1. select ename, sal from emp where sal = 3000;

 2. select ename, sal from emp where sal = '3000';

 

 - 숫자의 우선순위가 높아서 암시적으로 문자를 숫자로 형변환 해주는 데 이것을 암시적 형변환이라고 한다.

 - 오라클은 암시적 형변환을 수행해 에러가 나지 않고 결과를 출력해 주지만, 성능을 느리게 한다. 따라서 가급적이면 암시적 형변환이 발생하지 않도록 쿼리문을 작성하는 것이 중요하다.

 - 형면환이 이루어 졌는지 알아보고 싶다면 set autot on 구문을 사용하면 내부적 수행 결과를 알 수 있다.

 

1. to_char 

요소 결과
YYYY 숫자로 된 전체의 연도
YEAR 영어 철자로 표기된 연도
MM 월의 2자리 값
MONTH 전체 월 이름
MON 월의 3자 약어
DY 3분자로 된 요일의 약어
DAY 요일의 전체 이름
DD 숫자 형식의 월간 일
요소 표기
RRRR, RR, YYYY, YY
MM, MON
DD
hh, HH24
MI
SS
요일 DAY, D
IW, WW

 # 문제 49. 이름, 입사일 요일을 출력하는데 일월화수목금토 순으로 출력하시오.

 

select ename, to_char(hiredate,'day')

  from emp2

  order by to_char(hiredate,'d') asc;

 # 문제 50. 이름, 입사일 요일을 출력하는데 월화수목금토일 순으로 출력하시오.

 

select ename, to_char(hiredate,'day')

  from emp

  order by replace(to_char(hireday 'd'),1,8) asc;

 # 문제 51. 598213432185162135 를 1000원 단위마다 ,를 찍고 맨 앞에 $ 표시가 되도록 출력하시오. (응용 가능성 높음)

 

select to_chart('598213432185162135','$999,999,999,999,999,999')

  from dual

 

2. to_number

 # 문제 52. '5322'를 숫자형으로 바꿔서 출력하시오.

 

select to_number('5322')

  from dual;

 

3. to_date

 # 문제 53. 81년 11월 17일에 입사한 사원의 이름과 입사일을 출력하시오.

 

select ename, hiredate

  from emp

  where to_char(hiredate,'RR/MM/DD') = '81/11/17';

 # 문제 54. (튜닝) 위의 쿼리를 수정하시오.

 

select ename, hiredate

  from emp

  where hiredate = to_char('81/11/17','RR/MM/DD');

 - where 절의 좌변을 함수로 가공하면 검색속도가 느려지니 가급적 우변을 가공하는 형태로 튜닝해야 한다.