yekang

날짜에 대한 ROUND, TRUNC 함수 본문

빅데이터/SQL

날짜에 대한 ROUND, TRUNC 함수

예캉 2017. 12. 29. 14:10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- 날짜에 대한 ROUND, TRUNC
 
 
 
ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd hh24:mi:ss';
SELECT SYSDATE, ROUND(SYSDATE,'MONTH')
              , ROUND(SYSDATE,'year')
FROM dual;
SELECT last_name,hire_date,ROUND(hire_date,'YEAR')
FROM employees;
 
 
-- TRUNC 함수를 이용하여 1998년 3월에 입사한 사원들의 이름과 급여
-- 입사일을 출력해 보세요.
SELECT last_name,salary,hire_date
FROM employees
WHERE TRUNC(hire_date,'MONTH')='1998-03-01 00:00:00';
--1998년에 입사한 사원들
SELECT last_name,salary,hire_date
FROM employees
WHERE TRUNC(hire_date,'YEAR')='1998-01-01';
 
 
 
cs



* truncate 원리 (날짜에서의) 

TRUNC(hire_date,'MONTH')

1998-01-01 ~ 1998-01-31 이 1998-01-01 좌표에 점으로 mapping 되는 식이다.


* implicit VS explicit

implicit

- automatic    

- performance 측면의 문제나 오류의 무작용 생길 수도 있다!

<발생하는 경우> 

1. assignment

- T1의 c1(N)과 c2(C)열 존재한다고 할 때. 

- c1에 '12345' 입력하려고 하면 숫자형으로 바꿔주려고 하고 c2에 12345 입력하면 문자형을 바꾸려 한다.

2. expressionevaluation

- salary + '100' 

- 숫자 + 문자 => 1500!!! 

- 숫자가 문자보다 세다.

- WHERE 절에서 C2=12345 조건을 걸어주면 옵티마이저가 C2를 TO_NUMBER(C2)해서 확인해준다.

- 인덱스를 못탄다는 문제가 생길 수 있다. (타입 변환이 되면)

explicit

- manual

- 정확한 동작을 지시하는데 이는 귀찮은 일이다.



Comments