안녕하세요. 신기한 연구소입니다.
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 은 특히 잘 살펴보고 샘플로 테스트해보고 사용하길 권장합니다.
오늘도 즐거운 코딩 하세요~
잘못된 정보나 수정이 필요한 부분은 댓글 주세요
감사합니다.
'Software > 데이터베이스(SQL)' 카테고리의 다른 글
[HOW]sql 조건문 CASE와 DECODE 사용하는 방법 (0) | 2020.09.05 |
---|---|
[HOW]데이터베이스 SQL 날짜형 내장함수 사용법. -ORACLE/오라클 (0) | 2020.08.25 |
[데이터베이스]SQL 내장 함수 문자형 활용하기. (0) | 2020.08.17 |
[왕초보SQL]WHERE절 쉽게 사용해보기. (0) | 2020.08.10 |
[데이터베이스]DML(Data Manipulation Language) 왕초보 개발자를 위한 SQL 이야기. (0) | 2020.08.01 |