본문 바로가기
2.2 DB/ORACLE

[Oracle] 시간과 숫자를 원하는 단위까지 절사하는 함수 (TRUNC)

by Dohi._. 2024. 10. 7.
728x90

TRUNC함수는 Oracle에서 시간 및 숫자를 절사할때 많이 사용한다.

대략 내림함수와 비슷하다.

-- 기본 틀
 TRUNC(데이터, 설정값)

데이터: 잘라낼 시간 및 숫자

설정값 : 자르는 조건

 

1.숫자

SELECT         1234.1234      AS MAIN
       , TRUNC(1234.1234)     AS no        -- 0과 동일
       , TRUNC(1234.1234, 1)  AS one       -- 소수점1까지남기고 절삭
       , TRUNC(1234.1234, 2)  AS two       -- 소수점2까지 남기고 절삭
       , TRUNC(1234.1234, 0)  AS zero      -- 소수점이하절삭
       , TRUNC(1234.1234, -1) AS minus_one -- 1의 자리 이하 절삭
       , TRUNC(1234.1234, -2) AS minus_two -- 10의자리 이하 절삭
FROM DUAL

위에 있는 SQL문을 보면 주석에도 적어놨지만

숫자를 절삭 할땐 설정값이 비었을 경우 0 과 동일하다.

 

설정값의 의미는 소수점 기준으로 절삭이라고 알면 좋다

실제 SQL문을 돌려본 결과는 아래 사진과 같다

MAIN NO ONE TWO ZERO MINUS_ONE MINUS_TWO
1234.1234 1234 1234.1 1234.12 1234 1230 1200 

 

 

2. 시간

SELECT   SYSDATE
    , TRUNC(SYSDATE) AS TODAY
    , TRUNC(SYSDATE, 'MM') AS MM_월단위
    , TRUNC(SYSDATE, 'DD') AS DD_일단위
    , TRUNC(SYSDATE, 'IW') AS IW_주단위_월요일  -- 월요일 기준
    , TRUNC(SYSDATE, 'DAY') AS DAY_주단위_일요일  -- 일요일 기준
    , TRUNC(SYSDATE, 'HH24') AS HH24_시간단위
    , TRUNC(SYSDATE, 'MI') AS MI_분단위
FROM DUAL;

날짜에서는 설정값이 없을경우 일단위(DD)와 동일함을 알 수 있고 

날짜에서는 숫자단위가 아니라 키워드단위로 절삭하기 때문에 알고 있어야 절삭이 가능합니다.

 

사진에는 월요일 기준이 별칭이.. DAY되어있네요 ..허허

 

SYSDATE TODAY MM_월단위 DD_일단위 IW_주단위_월요일 DAY_주단위_일요일 HH24_시간단위 MI_분단위
10/7/2024 
1:48:46 PM
10/7/2024 
12:00:00 AM
10/1/2024 
12:00:00 AM
10/7/2024 
12:00:00 AM
10/7/2024 
12:00:00 AM
10/6/2024 
12:00:00 AM
10/7/2024 
1:00:00 PM
10/7/2024 
1:48:00 PM

 

여기서 주의해야할 점은 절삭이기 때문에 값을 버리는게 아니라 실질적으로 아래시간을 다 0으로 변환시킨것 뿐이지

데이터 양식은 그대로입니다 

만약에 날짜에서 시간을 아예 버려 글자형식으로 바꾸고 싶다면 아래함수를 참고바랍니다

 

  TO_CHAR(SYSDATE,'YYYY-MM-DD')

 

 

 

+) 추가지식

만약 날짜에 숫자단위를 넣을경우 

EX) TRUNC(SYSDATE, 1)

해당 에러가 뜬다

728x90

'2.2 DB > ORACLE' 카테고리의 다른 글

[Oracle] OUTER JOIN (+)  (0) 2024.10.04
[oracle] Union / Union ALL  (0) 2024.09.30
[Oracle] null 처리 함수 (NVL, NVL2)  (0) 2024.09.26
[Oracle/SQL] 날짜 마지막 시간 적용에 0.99999 쓰는 이유  (3) 2024.09.25
[ORACLE] 테이블 복제  (0) 2024.09.23

댓글