숫자 함수
🍎 함수
🍎 숫자함수
🍎 1) 수학적 함수
- 삼각함수, 지수함수등을 제공
- ABS(n) : n의 절댓값 반환
- SIGN(n) : n의 부호에 따라 음수이면 -1, 양수이면 1, 0이면 0을 반환
- SQRT(n) : n의 평방근 값을 반환
- POWER(e,n) : e의 n승값(e를 n번 반복 곱셉한 결과) 반환
- 그 밖에 SIN, TAN, COS, LOG 등의 함수 사용 가능
SELECT ABS(-100),
ABS(0.00005),
SIGN(-100000),
SIGN(0),`
SIGN(0.000009),
SQRT(24),
POWER(2,10)
FROM DUAL;
SELECT ABS(-100),
ABS(0.00005),
SIGN(-100000),
SIGN(0),`
SIGN(0.000009),
SQRT(24),
POWER(2,10)
FROM DUAL;
🍎 2) GREATEST, LEAST
- 최대값과 최소값 반환
(사용형식)
GREATEST(n1,n2[[,n3,...]), - 주어진 수 중 최대값 반환
LEAST(n1,n2[,n3,...]) - 주어진 수 중 최소값 반환
(EX1)
SELECT GREATEST('홍길동','김선동','홍길순');
LEAST('홍길동',57,'홍길순')
FROM DUAL;
(EX2) 회원테이블에서 회원들이 보유한 마일리지를 조사하여 1000미만의 회원들의마일리지를 999로 부여하여
Alias 회원번호,회원명,원래의마일리지. 변경마일리지
SELECT MEM_NAME
FROM MEMBER;
PRDER BY 2;
(EX3)1000보다 작으면 1000, 1000보다 크면 자기 마일리지 출력
SELECT MEM_ID
MEM_NAME
MEM_MILEAGE
MEM_GREATEST
🍎 3) ROUND TRUNC
- 반올림과 자리버림한 결과 반환
(사용형식)
ROUND(n[,l))
TRUNC(n,[,l])
- 주어진 수 n을 l+1번째 자리에서 자리올림(ROUND) 또는 자리버림(TRUNC)하여 반환
- l이 생략되면 0으로 간주
- l이음수이면 n에서 정수부분 -l자리에서 반올림 또는 자리버림 수행
(EX1)
SELECT ROUND(765265.56089,3),
TRUNC(765265.56089,3),
ROUND(765265.56089),
TRUNC(765265.56089),
ROUND(765265.56089,-2),
TRUNC(765265.56089,-2)
FROM DUAL;
(EX2) 사원테이블에서 이번달 보너스를 계산한 후 이를 포함하는 지급액을 계산하시오.
보너스 = (급여*영업실적(COMMISSION_PCT))의 27%
지급액 = 급여+보너스
Alias는 사원번호, 사업명, 급여, 영업실적코드, 보너스, 지급액
단, 보너스와 지급액은 정수로 표현 (소수 펏자리에서 반올림)
COMMISION_PCT는 2자리인데 소숫점이하가 2자리니까 정수부분 없음.
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
SALARY AS 급여,
COMMISION_PCT AS 영업실적코드,
NVL(ROUND(((SALARY*COMMISION_PCT)*0.27),0),0) AS 보너스,
ROUND(SALARY +NVL(((SALARY*COMMISION_PCT)*0.27),0),0) AS 지급액
FROM HR.EMPLOYEES;
왜 안돌아가ㅜ
🍎 4) MOD
- 나머지를 반환 (자바의 ‘%’연산자와 동일 기능을 수행하는 함수)
(사용형식)
MOD(n,m)
- 주어진 수 n을 m으로 나눈 나머지 반환
(EX1)
SELECT MEM_NAME AS 회원명,
MEM_BIR AS 생년월일,
TRUNC((TRUNC(SYSDATE)-TRUNC(MEM_BIR))/7) || '주' ||
MOD (TRUNC(SYSDATE)-TRUNC(MEM_BIR),7) || '일 경과'
FROM MEMBER;
🍎 5) CEIL, FLOOR
- 가장 가까운 정수를 반환
(사용형식)
CEIL(n), FLOOR(n)
- CEIL(n): n과 같거나 (n이 정수일때) 큰쪽에서 가장 가까운(제일작은)정수 반환
- FLOOR(n): n과 같거나(n이정수일때) 작은쪽에서 가장 가까운(제일 큰) 정수 반환
(EX)
SELECT CEIL(9.2345),CEIL(9),CEIL(-9.2435),
FLOOR(9.2435),FLOOR(9),FLOOR(-9.2435)
FROM DUAL;
🍎 6) REMAINDER(n,m)
- 주어진 수 n을 m으로 나눈 나머지를 반환. 단, 나머지가 m의 절반 크기보다 크면 n을m으로 나눈 몫+1의 값이 되기 위한 n값을 원수(n)에서 뺀 값을 반환
- MOD(n,m) : n - (m * FLOOR(n/m))
- REMINDER(n,m) : n-(m*ROUND(n/m))
(사용예시)
SELECT
MOD(29.7):29-(7*FLOOR(29/7))
29-(7*FLOOR(4.143))
29-(7*4)
29-28 => 1
REMAINDER(29,7) : 29 - (7*ROUND(29/7))
29-(7*ROUND(4.143))
29-(7*4)
29-28 => 1
MOD와 REMAINDER는 둘다 나머지지만 알고리즘이 다르므로 다른값이 나온다
MOD(26,7):26-(7*FLOOR(26/7))
26-(7*FLOOR(3.714))
26-(7*3)
26-21 => 5
REMAINDER(26,7) : 26 - (7*ROUND(26/7))
26-(7*ROUND(3.714))
26-(7*4)
26-28 => -2
🍎 7) WIDTH_BUCKET(n,min,max,b)
- 주어진 수 n이 min~max 값의 범위를 b개의 구간으로 나누었을때 몇번째 구간에 속하는지를 판간하여 구간 INDEX를 반환함.
- n이 min보다 작으면 0번구간을 반환하고, max보다 크거나 같으면 b+1번 구간 INDEX값을 반환함
(EX1)
SELECT WIDTH_BUCKET(86,10,90,9),
WIDTH_BUCKET(5,10,90,9),
WIDTH_BUCKET(90,10,90,9)
FROM DUAL;
(EX2) 회원테이블에서 회원들의 마일리지 1000~8000점을 8개 구간으로 구분하고 각 회원들의 구간 인덱스값을 구하시오
Alias는 회원번호, 회원명, 마일리지, 등급
'등급'란에 구간 인덱스를 구하되 많은 마일리지를 보유한 회원이 작은 수의 등급을, 제일 적은 마일리지를 보유한 회원이 제일 큰 등급을 부여할것
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지,
10-WIDTH_BUCKET(MEM_MILEAGE,1000,8000,8) AS 등급
FROM MEMBER;
Author And Source
이 문제에 관하여(숫자 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cheshirehyun/문자열-함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)