반응형

안녕하세요. 신기한 연구소입니다.

SQL을 짜다 보면 내장 함수의 필요성을 절실히 느끼는데요.

이번에는 숫자와 관련된 내장 함수를 알아보겠습니다.

 

숫자형 내장함수는 유용하게 많이 사용되므로 외우지 말고 신기한 연구소에 들러주세요. ㅎㅎ

 

ABS(숫자) 

-- 양수, 음수 관계없이 절댓값을 보여 줌.

은행의 입출금 내역은 그 양이 엄청 많습니다.

물론 한 고객의 하루 데이터는 거의 없거나 한 두건이겠지만

모든 고객의 하루 데이터는 엄청 많을겁니다.

그 경우 잘못 입금 또는 출금에 의해 마이너스로 처리되는 경우를 찾아야 한다면

기본 정렬을 하면 마이너스 부분이 앞이나 뒤로 밀리는데

이런 경우 금액을 ABS로 묶어주면 절댓값이 나와 그 거래를 찾기 쉬워집니다.

SELECT ABS(AMT)

  FROM ACCOUNT_INOUT

WHERE INOUT_DT = '20200819'

ORDER BY AMT;

 

MOD(숫자1, 숫자2)

-- 숫자1 나누기 숫자2 = 몫 + 나머지에서 나머지만 구하는 함수입니다.

짝수나 홀수를 구분하기 위해 사용할 수도 있습니다.

SELECT MOD(AMT, 2)

  FROM ACCOUNT;

AMT를 2로 나눠서 나머지가 0이면 짝수, 1이면 홀수가 되겠네요.

 

ROUNT(숫자, 자릿수) 

-- 소수점 반올림하는데 자릿수 + 1의 자리에서 반올림합니다.

-- 자릿수를 생략하면 기본 0이 됩니다.

SELECT ROUND(4.12345, 3) FROM DUAL;

>4.123

소수점 3자리를 표현하려면 +1을 해서 4번째 자리에서 반올림하면 됩니다.

 

CEIL(숫자)

-- 입력된 숫자보다 크거나 같은 최소의 정수를 보여줍니다.

결과는 정수입니다.

SELECT CEIL(22.123) FROM DUAL;

>23

입력값이 22.123이고 22보다 큰 수이기에 22의 다음인 23을 보여줍니다.

 

FLOOR(숫자)

-- CEIL과 대응되네요

-- 숫자보다 작거나 같은 최대의 정수를 보여줍니다.

결과는 정수입니다.

SELECT FLOOR(22.123) FROM DUAL;

>22

22.123은 22보다 크고 그 숫자보다 작거나 같은 최대 정수 22를 보여줍니다.

 

TRUNC(숫자, 자릿수)

--숫자에 대해 소수점의 자릿수에 1을 더한 위치에서 자릅니다.

--자릿수가 생략되면 역시 0이 됩니다.

ROUND 함수와 대응되네요.

SELECT TRUNC(22.1455, 3) FROM DUAL; 

>22.145

3번째 자리까지 표현하고 그 뒤는 버린다고 했으니 반올림 없이 바로 잘라버리면 됩니다.

 

위 숫자형 내장 함수는 실전에서도 정말 많이 사용됩니다.

그리고 그 특징을 잘 이해하고 있어야 실수를 하지 않습니다.

특히 이자 계산을 하는 경우

프로그램에서 반올림과 SQL에서 반올림이 다르거나

SQL에서도 다른 구문에서 다르게 설정해서 대사 과정에 차액이 발생하는 경우가 종종 있답니다.

ROUND, TRUNC, CEIL 은 특히 잘 살펴보고 샘플로 테스트해보고 사용하길 권장합니다.

오늘도 즐거운 코딩 하세요~

잘못된 정보나 수정이 필요한 부분은 댓글 주세요

감사합니다.

반응형