안녕하세요, 코딩으로 밥벌이 중인 밥코딩입니다.
업무중에 필요한 기초 코딩상식을 기록하고 있습니다.
oracle 쿼리 스크립트 작성 시,
소수점 표현을 위해 간편한 2가지 방법을 사용하고 있습니다.
일반적인 소수점과 확률(%) 퍼센트를 표현하는데 충분합니다.
- round 함수
- to_char (FM 문자형식 지정)
<예시 최종 결과>
- 특정 숫자를 소수점 이하 2자릿수로 표현
- 확률 계산하여 % 함께 표현
SELECT -- ROUND 함수
ROUND(123.567) AS R0 --결과 : 124
, ROUND(123.456 , 2) AS R1 --결과 : 123.46
, ROUND((5/2188)*100 , 2) AS R2 --결과 : 0.23
, ROUND( 0.228519 , 2) AS R3 --결과 : 0.23
, ROUND( 0.228519 , 2) || '%' AS R4 --결과 : .23%
, ROUND( 66.228519 , 2) || '%' AS R5 --결과 : 66.23%
-- TO_CHAR (FM 문자형식 지정)
, TO_CHAR(12.345678 , 'FM999.99') AS C0 --결과 : 12.35
, TO_CHAR( 0.228519 , 'FM999.99') AS C1 --결과 : .23
, TO_CHAR( 0.228519 , 'FM990.00') AS C2 --결과 : 0.23
, TO_CHAR( 0.228519 , 'FM990.00') ||'%' AS C3 --결과 : 0.23%
-- 'FM99999.999' : 정수 5개, 소숫점 3개 자리 중 존재하는 자릿수만 표현
-- (0으로 시작하거나 0으로 끝나는 수는 제외)
, TO_CHAR( 12345.123 , 'FM99999.999') AS FM0 --결과 : 12345.123
, TO_CHAR(1234567.12345, 'FM99999.999') AS FM1 --결과 : ######...
, TO_CHAR( 12.12 , 'FM99999.999') AS FM2 --결과 : 12.12
, TO_CHAR( 001.10 , 'FM99999.999') AS FM3 --결과 : 1.1
-- 'FM00000.000' : 정수 5개, 소숫점 3개 자리를 고정해서 표현
-- (없는 자릿수는 0으로 채워서 모두 표현, 0이라서 생략하는 경우 없음)
, TO_CHAR( 12345.123 , 'FM00000.000') AS FM4 --결과 : 12345.123
, TO_CHAR(1234567.12345, 'FM00000.000') AS FM5 --결과 : ######...
, TO_CHAR( 12.12 , 'FM00000.000') AS FM6 --결과 : 00012.120
, TO_CHAR( 001.10 , 'FM00000.000') AS FM7 --결과 : 00001.100
FROM DUAL
;
ROUND 함수 예제
ROUND 반올림 함수 : ROUND(값, 자릿수)
: 소수점 자릿수 지정시, 해당 소수점까지 반올림되어 나타납니다.
SELECT ROUND(123.567) AS P0 --결과 : 124
, ROUND(123.456 , 2) AS P1 --결과 : 123.46
, ROUND((5/2188)*100 , 2) AS P2 --결과 : 0.23
, ROUND( 0.228519 , 2) AS P3 --결과 : 0.23
FROM DUAL
;
- ROUND(123.567) 의 경우 소수점을 지정하지 않았으므로,
소수점 첫번째 자리에서 반올림하여 소수점은 표현하지 않습니다. → 결과 : 124 - ROUND(123.456, 2)의 경우 소수점 둘째자리(2) 를 지정하였으므로,
소수점 세번째 자리에서 반올림하여 소수점 둘째자리까지 표현합니다. → 결과 : 123.46
확률표현을 위해,
SELECT ROUND( 0.228519 , 2) || '%' AS P4 --결과 : .23%
, ROUND( 66.228519 , 2) || '%' AS P5 --결과 : 66.23%
FROM DUAL
;
- ROUND((5/2188)*100, 2) 로 확률 계산식 값을 구합니다.
(5/2188)*100 = 0.228519 → 결과 : 0.23 - 계산식 값을 반올림한 숫자 뒤에, 퍼센트(%) 문자를 이어 붙여 줍니다. → 결과 : .23 %
* 문자를 이어붙이자 앞 숫자 '0' 이 사라집니다. 이때 TO_CHAR 로 고정 포맷을 만들 수 있습니다. - ROUND( 66.228519 , 2) || '%' 의 경우,
0이 아닌 숫자에 대해서는 퍼센트(%) 문자를 이어붙여도 정상적으로 표현 됩니다. → 결과 : 66.23 %
TO_CHAR (FM 문자 형식 지정)
* TO_CHAR 는 이미 문자표현 방식이므로, 추가로 문자를 이어 붙여도 그대로 포맷이 유지됩니다.
- 9와 0으로 자릿수 포맷 지정.
- 9 : 가변 자릿수 (자릿수 값 없으면 표현 생략, 의미없는 숫자 -맨앞/맨뒤의 0- 은 표현 생략)
- 0 : 고정 자릿수 (자릿수 값 없으면 0으로 채우는 것 의미) - 확률을 표현하기 위해,
- 정수 : 3자리 고정 (확률의 경우, 최대치 100% 이므로)
- 소수점 : 예를 들어 2자리로 고정
SELECT -- TO_CHAR (FM 문자형식 지정)
TO_CHAR(12.345678 , 'FM999.99') AS C0 --결과 : 12.35
, TO_CHAR( 0.228519 , 'FM999.99') AS C1 --결과 : .23
, TO_CHAR( 0.228519 , 'FM990.00') AS C2 --결과 : 0.23
, TO_CHAR( 0.228519 , 'FM990.00') ||'%' AS C3 --결과 : 0.23%
FROM DUAL
;
★ 'FM999' 와 'FM000' 의 상세 차이를 확인 해 보겠습니다.
'FM999'
SELECT -- 'FM99999.999' : 정수 5개, 소숫점 3개 자리 중 존재하는 자릿수만 표현
-- (0으로 시작하거나 0으로 끝나는 수는 제외)
TO_CHAR( 12345.123 , 'FM99999.999') AS FM0 --결과 : 12345.123
, TO_CHAR(1234567.12345, 'FM99999.999') AS FM1 --결과 : ######...
, TO_CHAR( 12.12 , 'FM99999.999') AS FM2 --결과 : 12.12
, TO_CHAR( 001.10 , 'FM99999.999') AS FM3 --결과 : 1.1
FROM DUAL
;
- → 결과 : ######... (지정된 정수5자리, 소수점3자리중 하나라도 자릿수 넘어가면 에러)
- → 결과 : 12.12 (9로 채워진 자릿수에 숫자가 없으면 표현 생략)
- → 결과 : 1.1 (9로 채워진 자릿수에 0으로 시작하거나 0으로 끝나는 수는 표현 생략)
'FM000'
SELECT -- 'FM00000.000' : 정수 5개, 소숫점 3개 자리를 고정해서 표현
-- (없는 자릿수는 0으로 채워서 모두 표현, 0이라서 생략하는 경우 없음)
TO_CHAR( 12345.123 , 'FM00000.000') AS FM4 --결과 : 12345.123
, TO_CHAR(1234567.12345, 'FM00000.000') AS FM5 --결과 : ######...
, TO_CHAR( 12.12 , 'FM00000.000') AS FM6 --결과 : 00012.120
, TO_CHAR( 001.10 , 'FM00000.000') AS FM7 --결과 : 00001.100
FROM DUAL
;
- → 결과 : ######... (지정된 정수5자리, 소수점3자리중 하나라도 자릿수 넘어가면 에러)
- → 결과 : 00012.120 (없는 자릿수는 0으로 채워서 모두 표현)
- → 결과 : 00001.100 (없는 자릿수는 0으로 채워서 모두 표현)
읽어주셔서 감사합니다.
질문주시면 같이 공부하면서 답변 드리겠습니다.