본문 바로가기
DB/Oracle

[Oracle] 반올림, 버림(절사) / ROUND 함수, TRUNC 함수

by 키튼햄 2023. 10. 12.

오라클 SQL에서 소수점 자리수를 지정할때는 ROUND 함수를 사용한다.

ROUND함수는 특정 소수점을 반올림하고 나머지는 버리는 함수이다.

만약, 소수점을 반올림하지 않고 절사(버림)만 원한다면 TRUNC 함수를 사용해야한다.

 

 

 

ROUND 함수

-  특정 소수점을 반올림하고 나머지는 버리는 함수

 

형식)

ROUND("값",  "자릿수")

 

 

예제)

소수점 반올림

SELECT ROUND(1235.543)    --1236      (소수점 첫째자리에서 반올림)
     , ROUND(1235.443)    --1235      (소수점 첫째자리에서 반올림)
     , ROUND(1235.443, 0) --1235      (소수점 첫째자리에서 반올림)
     , ROUND(1235.345, 1) --1235.3    (소수점 둘째자리에서 반올림)
     , ROUND(1235.345, 2) --1235.35   (소수점 셋째자리에서 반올림)
     , ROUND(1235.345, 3) --1235.345  (소수점 넷째자리에서 반올림)
  FROM DUAL

 

정수 반올림

정수 자리는 소수점부터 '-'부호를 붙여서 거꾸로 센다.

SELECT ROUND(1235.345, -1) --1240
     , ROUND(1235.345, -2) --1200
     , ROUND(1235.345, -3) --1000
  FROM DUAL

 

날짜 반올림

아래는 시간을 기준으로 정오(12시) 기준으로 날짜를 반올림하는 예제이다.

SELECT ROUND(TO_DATE('2023-10-12 11:50', 'yyyy-mm-dd hh24:mi')) dte_am   --2023-10-12 00:00:00
     , ROUND(TO_DATE('2023-10-12 12:10', 'yyyy-mm-dd hh24:mi')) dte_pm   --2023-10-13 00:00:00
  FROM DUAL

 

 

 

 

TRUNC

- 소수점을 반올림하지 않고 절사(버림)

 

형식)

TRUNC ("값",  "자릿수")

 

 

예제)

SELECT TRUNC(1235.443, 0) --1235      (소수점 모두 버림)
     , TRUNC(1235.345, 1) --1235.3    (소수점 첫째자리아래 버림)
     , TRUNC(1235.345, 2) --1235.34   (소수점 둘째자리에서 버림)
     , TRUNC(1235.345, -2) --1200     (십의자리부터 버림)
  FROM DUAL

자릿수가 양수일때는 소수점을 기준으로 우측 n번째 자리까지 보여준다는 의미이고,

자릿수가 음수일때는 소수점을 기준으로 좌측 n번째 자리에서 버림(절사)가 발생한다.

 

더보기

문제

PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.

 

예시

만원 단위의 가격대 별로 상품을 나누면

  • 가격대가 0원 ~ 1만원 미만인 상품은 PRODUCT_ID 가 2인 상품 1개,
  • 가격대가 1만원 이상 ~ 2만원 미만인 상품들은 PRODUCT_ID 가 1, 4, 6인 상품 3개,
  • 가격대가 2만원 이상 ~ 3만원 미만인 상품은 PRODUCT_ID 가 3인 상품 1개,
  • 가격대가 3만원 이상 ~ 4만원 미만인 상품은 PRODUCT_ID 가 5인 상품 1개,

에 각각 해당하므로 다음과 같이 결과가 나와야 합니다.


작성 코드

SELECT TRUNC(PRICE,-4) AS PRICE_GROUP,
       COUNT(*) AS PRODUCTS
FROM PRODUCT 
GROUP BY TRUNC(PRICE,-4)
ORDER BY PRICE_GROUP;

해석)
여기서 TRUNC에서 사용한 `-4`는 내림할 자릿수를 나타낸다. 여기서는 가장 가까운 만원단위로 내림하는 것으로 볼 수 있다.
예를들자면
1. `PRICE` 컬럼의 값이 12,345라면 `TRUNC(PRICE,-4)`는 가장 가까운 만원단위로 내림하여 10,000원을 반환한다.
2. `PRICE` 컬럼의 값이 5,678라면 `TRUNC(PRICE,-4)`는 5,000을 반환한다.

 

 

 

 


참고 블로그