이번 포스팅은 TRUNC함수를 이용한 소수점, 날자 형식 짜르기에 대한 내용입니다.
TRUNC 함수는 숫자의 소숫점을 절삭할때 사용을 하는데
날짜 형식의 날짜, 시간 이후의 값을 절삭 할때도 유용하게 사용될수 있습니다.
|
SELECT TRUNC(203.12347) ,TRUNC(203.12347,5) ,TRUNC(203.12347,4) ,TRUNC(203.12347,3) ,TRUNC(203.12347,2) ,TRUNC(203.12347,1) FROM DUAL; |
|
|
|
1. 형식 : TRUNC(숫자, 소숫점절삭위치) 2. TRUNC 함수에 소숫점절삭위치를 생략하면 소숫점을 전부 잘라 버립니다. 3. TRUNC 함수에 소숫점절삭위치를 지정하면 지정한 위치 이후의 자리를 절삭합니다. |
|
SELECT IN_END_DT ,TRUNC(IN_END_DT,'YYYY') ,TRUNC(IN_END_DT,'MM') ,TRUNC(IN_END_DT,'HH24') ,TRUNC(IN_END_DT,'MI') ,TRUNC(IN_END_DT,'DD') FROM (SELECT TO_DATE('20130405082510','YYYYMMDDHH24MISS') AS IN_END_DT FROM DUAL); |
|
|
|
1. TRUNC(날짜,절삭위치) 2. 절삭위치 날짜 관련 파라미터 값 1) YYYY : 년도를 제외한 부분을 절삭합니다. 월은 01로, 일은 1로, 시분초 는 00 으로 설정합니다. 2) MM : 년, 월을 제외한 부분을 절삭합니다. 일은 1로, 시분초 는 00 으로 설정합니다. 3) DD : 년, 월,일을 제외한 부분을 절삭합니다. 시분초 는 00 으로 설정합니다. 4) HH24 : 분, 초를 00으로 절삭합니다. 5) MI : 초를 00으로 절삭합니다. |
|
SELECT IN_FR_DT,IN_END_DT , ROUND((IN_END_DT - IN_FR_DT)*24)+1 FROM (SELECT TO_DATE('20130405082510','YYYYMMDDHH24MISS') AS IN_FR_DT, TO_DATE('20130405134510','YYYYMMDDHH24MISS') AS IN_END_DT FROM DUAL) |
|
|
|
시작 시간에서 끝 시간을 시간 단위로 쪼개는 쿼리를 만들어 보려고 합니다. 2013-04-05 08:25:10 ~ 2013-04-05 13:45:10 사이의 시간차는 6시간 이며, 시간 간격을 행으로 만들어 보려고 합니다. |
|
SELECT IN_FR_DT,IN_END_DT , IN_FR_DT+(LEVEL-1)/24 AS N_IN_FR_DT , IN_FR_DT+(LEVEL)/24 N_IN_END_DT , LEVEL AS NO FROM (SELECT TO_DATE('20130405082510','YYYYMMDDHH24MISS') AS IN_FR_DT, TO_DATE('20130405134510','YYYYMMDDHH24MISS') AS IN_END_DT FROM DUAL) CONNECT BY LEVEL <= ROUND((IN_END_DT - IN_FR_DT)*24)+1; |
|
|
|
CONNECT BY LEVEL <= ROUND((IN_END_DT - IN_FR_DT)*24)+1 함수를 이용하여 시간차를 구하고 +1을 하여 6이라는 시간차를 구했고 CONNECT BY LEVEL <= 6 한시간 간격으로 6행을 만들었어요 |
|
SELECT IN_FR_DT,IN_END_DT , DECODE(LEVEL,1,IN_FR_DT, IN_FR_DT+(LEVEL-1)/24) AS N_IN_FR_DT , DECODE(LEVEL,ROUND((IN_END_DT - IN_FR_DT)*24)+1,IN_END_DT,IN_FR_DT+(LEVEL)/24) N_IN_END_DT , LEVEL AS NO FROM (SELECT TO_DATE('20130405082510','YYYYMMDDHH24MISS') AS IN_FR_DT, TO_DATE('20130405134510','YYYYMMDDHH24MISS') AS IN_END_DT FROM DUAL) CONNECT BY LEVEL <= ROUND((IN_END_DT - IN_FR_DT)*24)+1; |
|
|
|
첫번째 시작 시간, 마지막 종료시간의 분을 DECODE를 이요하여 설정하였습니다. 첫 행의 시작 시간은 입력시간으로, 마지막 행의 완료시간은 입력한 완료시간으로 설정하였어요. |
|
SELECT IN_FR_DT,IN_END_DT , DECODE(LEVEL,1,IN_FR_DT, TRUNC(IN_FR_DT+(LEVEL-1)/24,'HH24')) AS N_IN_FR_DT , DECODE(LEVEL,ROUND((IN_END_DT - IN_FR_DT)*24)+1,IN_END_DT,TRUNC(IN_FR_DT+(LEVEL)/24,'HH24')) N_IN_END_DT , LEVEL AS NO FROM (SELECT TO_DATE('20130405082510','YYYYMMDDHH24MISS') AS IN_FR_DT, TO_DATE('20130405134510','YYYYMMDDHH24MISS') AS IN_END_DT FROM DUAL) CONNECT BY LEVEL <= ROUND((IN_END_DT - IN_FR_DT)*24)+1 |
|
|
|
첫행의 시작 시간, 마지막 행의 완료시간을 제외한 시간값을 TRUNC(값,'HH24')을 해서 분,초를 '00'으로 만들어어요
|
'SQL > ORACLE함수' 카테고리의 다른 글
| [오라클함수] 오라클 DECODE함수 사용하기 (0) | 2014.06.11 |
|---|---|
| [오라클함수] GROUP BY 컬럼..컬럼 사용하기 (0) | 2014.06.11 |
| [오라클함수] DB LINK 연결 사용 (0) | 2014.06.11 |
| [오라클함수] 오라클 행열 바꾸기(CASE WHEN, MAX함수 사용) (0) | 2014.06.11 |
| 오라클 EXISTS함수, NOT EXISTS, MINUS (2) | 2014.06.11 |
| 오라클 프로시져 기본 문법 (0) | 2014.06.11 |
| 오라클 - 데이터 가져오기편 1 (0) | 2014.06.11 |
| 오라클 - 함수 공부 1 (0) | 2014.06.11 |





