일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Oracel
- seaborn
- Kaggle
- 실습
- pandas
- matplotlib
- 카카오
- 파이썬
- level 1
- SQL
- 실기
- 튜닝
- Python
- level 2
- python3
- 빅분기
- R
- 프로그래머스
- oracle
- Numpy
- 코딩테스트
- 머신러닝
- 데이터 분석
- 알고리즘
- 오라클
- 빅데이터 분석 기사
- sklearn
- Today
- Total
라일락 꽃이 피는 날
[Oracle] 단일행 함수 - 변환 함수 본문
변환 함수는 데이터의 유형을 변환하는 함수이다.
데이터 유형의 종류로는 문자형, 숫자형, 날짜형이 있다.
문자형 ↔ 날짜형 변환
to_char(날짜, '날짜포맷')
to_date(문자, '날짜포맷')
날짜 형식 확인
select NLS_DATE_FORMAT
from nls_session_parameters;
날짜 포맷
- RRRR, RR, YYYY, YY : 년도
- MM, MON : 달
- DD : 일
- DAY, DY, D : 요일
- WW, IW : 주
- HH, HH24 : 시간
- MI : 분
- SS : 초
예제 1. 오늘이 무슨 요일인지 출력
select to_char(sysdate, 'day'), to_char(sysdate, 'dy'), to_char(sysdate, 'd')
from dual;
일요일이 1 이고, 월요일이 2 이고, 토요일이 7 이다.
예제 2. 이름, 입사일, 입사한 년도를 출력
select ename, hiredate, to_char(hiredate, 'RRRR'), to_char(hiredate, 'RR')
, to_char(hiredate, 'YYYY'), to_char(hiredate, 'YY')
from emp;
RR 날짜 포맷과 YY 날짜 포맷의 차이점
RR : 현재 연도를 기준으로 가까운 연도 (81년 → 1981년)
YY : 현재 연도를 기준으로 현재 세기로 인식 (81년 → 2081년)
예제 3. 이름과 월급을 출력할 때, 천 단위를 부여해서 출력
select ename, sal, to_char(sal, '999,999')
from emp;
예제 4. 81년 11월 17일에 입사한 사원들의 이름과 입사일을 출력
select ename, hiredate
from emp
where hiredate = '81/11/17';
select ename, hiredate
from emp
where hiredate = '81-11-17';
select ename, hiredate
from emp
where hiredate = '81.11.17';
'년도 월 일’ 순서만 지키면 사이에 /, -, . 을 사용 하는 건 자유다.
예제 5. 프랑스에서 81년 11월 17일에 입사한 사원들의 이름과 입사일을 출력
select ename, hiredate
from emp
where hiredate = '17/11/81';
나라마다 날짜를 보는 기준이 다르기 때문에, 일/월/년도 순으로 검색해야 한다.
select ename, hiredate
from emp
where hiredate = to_date('1981/11/17', 'RRRR/MM/DD');
select ename, hiredate
from emp
where hiredate = to_date('17/11/1981', 'DD/MM/RRRR');
위와 같이 작성하면 어느 나라에서든 에러 없이 조회 된다.
예제 6. 아래의 SQL이 수행되는지 확인
select ename, sal
from emp
where sal like '30%';
다른 DB 소프트웨어에서 수행하면 에러가 발생하지만 오라클은 에러가 안 나고 수행된다.
즉, 암시적 형 변환이 발생했다.
암시적 형 변환이 발생했는지 알기 위해서 오라클이 내부적으로 이 SQL을 어떻게 수행했는지 확인한다.
explain plan for
select ename, sal
from emp
where sal like '30%';
select * from table(dbms_xplan.display);
내부적으로 수행한 SQL을 확인해보니까 sal를 to_char 로 감싸서 문자형으로 변경해주고 있다.
‘30%’ 가 문자형이어서 sal를 문자형으로 변경해준 것이다.
위와 같이 암시적 형 변환이 발생하게 되면 성능이 느려지는 경우가 생긴다.
그래서 우리는 암시적 형 변환이 발생하지 않도록 평상시에 SQL을 잘 작성해줘야 한다.
'프로그래밍 > Oracle' 카테고리의 다른 글
[Oracle] 복수행 함수 - 집계함수 (0) | 2022.05.29 |
---|---|
[Oracle] 단일행 함수 - 일반 함수 (0) | 2022.05.27 |
[Oracle] 단일행 함수 - 날짜 함수 (0) | 2022.05.25 |
[Oracle] 단일행 함수 - 숫자 함수 (0) | 2022.05.25 |
[Oracle] 단일행 함수 - 문자 함수 (0) | 2022.05.25 |