💻Programming/Oracle

[Oracle/오라클] 숫자형 함수

horang_dev 2021. 3. 14.

 숫자형 함수  

1. 수학적 함수 ( ABS, SIGN, POWER, SQRT ... 등 )

     - ABS(n) : n의 절댓값

     - SIGN : n의 부호 ( 음수 : -1, 양수 : 1, 0 : 0 )

     - POWER( n, e ) : n의 e승 값 반환

     - SQRT( n ) : n의 루트 값

SELECT ABS(-100),
       ABS(0.000001),
       SIGN(10000000),
       SIGN(-10000000),
       SIGN(0.0000001),
       SIGN(-0.0000001),
       SIGN(0),
       POWER(2,10),
       SQRT(1024)
  FROM DUAL;

-- 출력 결과 --


 

2. 최댓값과 최솟값

     - GREATEST, LEAST : 주어진 자료 중 최댓값과 최솟값을 구함

     - MAX, MINIMUN : 불특정한 자료 중 최댓값과 최솟값을 구함     

SELECT GREATEST(20,40,5,70), 
       LEAST(20,40,5,70) 
  FROM DUAL;

-- 출력 결과 --


3. ROUND, TRUNC

     - 주어진 숫자 자료를 반올림 ( ROUND ) 또는 자리버림 ( TRUNC ) 연산 후 결과값 반환

    1) ROUND ( n, i ) 

       - i 가 양수이면 주어진 자료 n에서 소숫점 이하 i+1번째 자리에서 반올림하여 i번째 수까지 반환

       - i 가 음수이면 주어진 자료 n에서 정수부의 i번째 자리에서 반올림하여 결과 반환

       - i 를 생략하면 0 으로 간주

 

    2) TRUNC ( n, i ) 

       - i 가 양수이면 주어진 자료 n에서 소숫점 이하 i+1번째 자리에서 자리버림하여 i번째 수까지 반환

       - i 가 음수이면 주어진 자료 n에서 정수부의 i번째 자리에서 자리버림하여 결과 반환

       - i 를 생략하면 0 으로 간주

 

ex) 사원테이블(employees)의 자료를 이용하여 이번달 급여를 조회하시오.

      보너스 = 본봉의 13%

      지급액 = 본봉 + 보너스

      Alias는 사원번호, 사원명, 본봉, 보너스 , 지급액이다.

      단, 보너스 및 지급액은 소수 첫 자리 까지 나타내시오.

SELECT employee_id AS 사원번호,
       emp_name AS 사원명,
       salary AS 본봉,
       ROUND(salary*0.3, 1) AS 보너스,
       salary + ROUND(salary*0.3, 1) AS 지급액
  FROM employees;

-- 출력 결과 --


4. MOD, REMAINDER

     - 나머지 값을 반환

    1) MOD ( c, n ) 

       - 주어진 수 c를 n으로 나눈 나머지 반환

       - Java의 ' % '연산자와 동일 기능

 

    2) REMAINDER ( c, n ) 

       - 주어진 수 c를 n으로 나눈 나머지 반환

       - 내부적으로 MOD와 다른 방법으로 처리하여 다른 결과 반환

       - MOD : 나머지 = c  - n * FLOOR (c/n)

          REMAINDER : 나머지 = c  - n * ROUND (c/n)

 

ex) 13/5의 나머지

      i) mod : 13 - 5*floor(13/5)
                 13 - 5*floor(2.6)
                 13 - 5*2 => 3
       ii) remainder
                13 - 5*round(13/5)
                13 - 5*round(2.6)
                13 - 5*3 => -2

SELECT MOD(13,5),
       REMAINDER(13,5)
  FROM DUAL;

-- 출력 결과 --


5. CEIL ( n ) , FLOOR ( n )

     - 주어진 수 n에 가장 근접한 정수를 반환

     - CEIL 은 n과 같거나 큰 수 중 가장 작은 정수

     - FLOOR 는 n과 같거나 작은 수 중 가장 큰 정수 ( n을 초과할 수 없음 )

 

ex) CEIL(23.54) -> 24 /  CEIL(-23.54) -> -23

     FLOOR(23.54) -> 23 / FLOOR(-23.54) -> -24


6. WIDTH_BUCKET

     - 주어진 최솟값과 최댓값을 몇개의 그룹으로 나누고 제시된 값이 어느 그룹에 속하는 지를 반환

 

    WIDTH_BUCKET ( c, min, max, b )

     - c : 주어진 수

     - min : 구간의 하한 값

     - max : 구간의 상한 값

     - b : 구간의 수

 

ex) 사원테이블(employees)에서 사원의 급여에 따른 등급을 구하여 출력하시오.

    급여를 2000부터 22000까지 9개 등급으로 나누고 급여가 많은 사원이 작은 등급을 부여받도록 하시오.

    Alias는 사원번호, 사원명, 급여, 등급이다.

SELECT employee_id AS 사원번호,
       emp_name AS 사원명,
       salary AS 급여,
       WIDTH_BUCKET(salary, 22000, 2000, 9) || '등급' AS 등급
  FROM employees;

-- 출력 결과 --

반응형

댓글