이번 포스팅은 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 |