[Oracle] 오라클 소수점 존재 여부 체크 및 소수점 이하 값 구하기

오라클 쿼리를 작성하다 보면 수치값에 소수점이 존재하는지 또는 정수는 버리고 소수점 이하의 값만 잘라서 사용해야 할 때가 있다. 위의 상황을 한 번에 해결할 수 있는 함수가 없기 때문에 직접 연산을 해야 한다.

 

소수점 체크
 - "컬럼" <> TRUNC("컬럼")
 - INSTR("컬럼", ".") > 0

소수점 이하 값
 - "컬럼" - TRUNC("컬럼")

 

 

소수점 체크 방법

TRUNC( ) 함수를 이용하는 방법

수치 값에서 TRUNC 함수를 사용하여 소수점 이하를 버리고 동일한 값이면 소수점이 없다

 

WITH temp AS (
    SELECT 1.25 AS num1
         , 1.0  AS num2
         , 0.25 AS num3
         , 1    AS num4 
      FROM dual
)

SELECT num1 --1.25
     , num2 --1.0
     , num3 --0.25
     , num4 --1
     , CASE WHEN num1 <> TRUNC(num1) THEN 'Y' ELSE 'N' END AS num1_result
     , CASE WHEN num2 <> TRUNC(num2) THEN 'Y' ELSE 'N' END AS num2_result
     , CASE WHEN num3 <> TRUNC(num3) THEN 'Y' ELSE 'N' END AS num3_result
     , CASE WHEN num4 <> TRUNC(num4) THEN 'Y' ELSE 'N' END AS num4_result
  FROM temp

 

 

INSTR( ) 함수를 이용하는 방법

INSTR 함수를 사용하여 수치 값에 쩜(".")이 있는지 체크한다

 

WITH temp AS (
    SELECT 1.25 AS num1
         , 1.0  AS num2
         , 0.25 AS num3
         , 1    AS num4 
      FROM dual
)

SELECT num1 --1.25
     , num2 --1.0
     , num3 --0.25
     , num4 --1
     , CASE WHEN INSTR(num1, '.') > 0 THEN 'Y' ELSE 'N' END AS num1_result
     , CASE WHEN INSTR(num2, '.') > 0 THEN 'Y' ELSE 'N' END AS num2_result
     , CASE WHEN INSTR(num3, '.') > 0 THEN 'Y' ELSE 'N' END AS num3_result
     , CASE WHEN INSTR(num4, '.') > 0 THEN 'Y' ELSE 'N' END AS num4_result
  FROM temp

 

 

소수점 이하 값 구하기 (정수 버리기)

수치 값에 TRUNC 함수로 소수점을 버린 값을 빼면 소수점 이하의 값만 남는다

 

WITH temp AS (
    SELECT 1.25 AS num1
         , 1.0  AS num2
         , 0.25 AS num3
         , 1    AS num4 
      FROM dual
)

SELECT num1 --1.25
     , num2 --1.0
     , num3 --0.25
     , num4 --1
     , num1 - TRUNC(num1) AS num1_result
     , num2 - TRUNC(num2) AS num2_result
     , num3 - TRUNC(num3) AS num3_result
     , num4 - TRUNC(num4) AS num4_result
  FROM temp

 

 

 

댓글

Designed by JB FACTORY