Oracle/SQL

숫자데이터타입

psys 2020. 6. 2. 18:53
728x90

number(p, s)

p:precision 정밀도 = 최대 유효숫자 자리수
s:scale     소수점 기준 자릿수 의미
p는 소수점 기준으로 모든 유효숫자 자릿수를 의미한다.
s가 양수이면 소수점 이하. 음수이면 소수점 이상(소수점 기준 왼쪽)
유효숫자 자릿수를 나타낸다.
s에 명시한 숫자 이상의 숫자를 입력하면 s에 명시한 숫자로 반올림 처리
s가 음수이면 소수점 기준으로 왼쪽 자리수만큼 반올림.
s가 p보다 크면 p는 소수점 이하 유효숫자 자릿수를 의미

create table ex2_3 (
        col1 number(3) ,
        col2 number(3,2) ,
        col3 number(5,-2)
);
    
insert into ex2_3 (col1) values (0.7898);       -- 1
insert into ex2_3 (col1) values (99.5);         -- 100
insert into ex2_3 (col1) values (1004);         -- 오류(정수 3자리)

insert into ex2_3 (col2) values (0.7898);		-- 0.79
insert into ex2_3 (col2) values (1.2345);		-- 1.23
insert into ex2_3 (col2) values (32);           -- 오류(정수부분은 1자리)

insert into ex2_3 (col3) values (12345.2346);   -- 12300
insert into ex2_3 (col3) values (12367.2346);   -- 12400
insert into ex2_3 (col3) values (1234567.35);   -- 1234600
insert into ex2_3 (col3) values (12345678.35);  -- 오류(자릿수 오류)

 

ROUND(n, i)

 매개변수 n 을 소수점 기준 ( i+1) 번 째에서 반올림한 결과를 반환 디폴트 0)
N 이 0 일때 i 입력된 숫자에 상관없이 0 을 반환하며 , 
i 가 음수이면 소수점을 기준으로 왼쪽 i 번째에서 반올림이 일어난다.

select round(10.154)    --10
    , round(10.154)     --10
    , round(10.154)     --10
from dual;
select round(10.154,1)  --10.2
    , round(10.154,2)   --10.15
    , round(10.154,3)   --10.154
from dual;
select round(0,3)       --0
    , round(115.155,-1) --120
    , round(115.155,-2) --100
from dual;

 

TRUNC

반올림을 하지 않고 n1을 소수점 기준 n2자리에서 무조건 잘라냄
디폴트 (0)
양수일 때는 소수점 기준으로 오른쪽, 음수일 때는 소수점 기준으로 왼쪽 자리에서 잘라냄

select trunc(115.155)   --115
    , trunc(115.155,1)  --115.1
    , trunc(115.155,2)  --115.15
    , trunc(115.155,3)  --115.155
from  dual;

ex>

employees 테이블에서
사번, 사원명, 월급, 일당(월급/30) 소수점 셋째자리에서 반올림 하여 일당이 많은 순으로 정렬
사번    사원명                           월급           일당
100    Steven King           24000       774.19
102    Lex De Haan            17000        548.39
101    Neena Kochhar      17000        548.39
145    John Russell            14000        451.61

select employee_id, emp_name, salary, round(salary/30,2) as 일급
from employees
order by 4 desc;

 

'Oracle > SQL' 카테고리의 다른 글

DML(Data Manipulation Language, 데이터조작어)  (0) 2020.06.03
제약조건  (0) 2020.06.02
시간타입과 NOTNULL  (0) 2020.06.02
오라클 제약조건 SQL  (0) 2020.06.02
테이블생성  (0) 2020.06.02