본문 바로가기

Oracle/SQL

SQL 단일행 함수 - 숫자함수 (Round, Trunc, Mod)반올림, 숫자버리기, 나누기

 숫자함수

ROUND (반올림 하여 출력)

예제 : 876.567 소수점 두번째 자리인 6에서 반올림 해서 출력

select round(876.567, 1)
from dual;

두번째 자리에서 반올림하면 소수점 첫번째 자리 값만 출력되기 때문에 1 이다.

0 은 = '.' 의 자리수를 의미한다

round(숫자, 0 ) 의 0 은 쓰나, 안쓰나 같은 값이 나온다.

문제 : 우리반 테이블에서 나이를 출력하는데 , 일의 자리에서 바로 반올림

select round(sal, 2)
from emp;

Trunc (숫자를 버리고 출력하기)

예제 : 876.567 출력, 소수점 두번짜자리인 6과 그 이후 숫자를 모두 버리고 출력

select trunc(876.567, 1)
from dual;

설명 : 소수점 이후는 지정된 자리 이후의 숫자들을 버리는 것이고, 소수점 이전은 지정된 자리를 포함해서 버리는 것이다

비식별 처리기법으로 데이터를 암호화 할때 유용하다.

문제 : 우리반 테이블에서 이름, 나이를 출력하는데 나이를 비식별 처리하여 출력 하시오

(단 출력시 20대, 30대 이런식으로 출력 되도록 하시오 )

select ename, trunc(age, -1)||'대'
from emp14;

→ -1 의 이유는 나이가 두자리 수에서 1의 자리를 버리는것이므로

버리는 수인 일의 자리를 지칭하는 단어인 ' -1 '을 작성한다. 

만약 소수점 이하인 숫자들을 버리게 될때에는 양수이고 십의자리이후를 버릴때에는 음수표현인 '-2' 를 작성하면 된다. 

숫자 8 7 6 . 5 6 7 8
자리 -3 -2 -1 0 1 2 3 4

trunc(컬럼명, -1 )처럼 소숫점 이전 숫자를 표기할때는 -1 자리수를 버린다는의미이고 

trunc (컬럼명, 1) 처럼 소숫점 이하 숫자를 표기할때는 1의 자리수는 살리고 그 이후 2의 자리부터 버린다는 의미이다. 


MOD (나눈 나머지값 출력하기)

select mod(10,3)
from dual;

문제 : 테이블에서 이름과 나이 출력 후 나이가 홀수인 학생들만 출력

select ename, age
from emp14
where mod(age,2)=1;

검색조건이 나이가 홀수인 것. 따라서 where 절에 홀수를 지칭하는 sql 식을 작성해준다. 

2를 나누어서 나머지 값이 1이면 홀수 이다.