[Number Function]
ABS(n) : 인수 n의 절대값을 반환
CEIL(n) : 인수 n보다 크거나 같은 최소 정수를 반환
EXP(n) : e(2.718…)의 n승을 반환
FLOOR(n) : 인수 n보다 작거나 같은 최대 정수를 반환
MOD(m, n) : 인수 m을 n으로 나눈 나머지를 반환
POWER(m, n) : 인수 m의 n 지수승을 반환
ROUND(m, n) : 인수 m을 소수이하 n 자리까지 표시하는데 반올림 한다.
SIGN( n) : n이 음수면 -1, 양수이면 1, 0이면 0을 리턴한다.
TRUNC(m, n) : 인수 m을 소수이하 n 자리까지 표시 하는데 절삭 한다.
WIDTH_BUCKET(n, min_value, max_value, num_buckets)
: 인수n을 min_value, max_value 범위로 num_buckets 만큼 등급을 나누어 표시한다.
2. SQL기초강좌_숫자 및 날짜함수
숫자함수
날짜 ,시간, 숫자를 다루는 SQL 함수들은 다양하다. 이들 모두를 외우는 것은 불가능
한 것은 아니지만 쉽게 잊어 버리게 되므로 실습을 따라 하면서 사용법을 이해하자.
[Number Function]
ABS(n) : 인수 n의 절대값을 반환
CEIL(n) : 인수 n보다 크거나 같은 최소 정수를 반환
EXP(n) : e(2.718…)의 n승을 반환
FLOOR(n) : 인수 n보다 작거나 같은 최대 정수를 반환
MOD(m, n) : 인수 m을 n으로 나눈 나머지를 반환
POWER(m, n) : 인수 m의 n 지수승을 반환
ROUND(m, n) : 인수 m을 소수이하 n 자리까지 표시하는데 반올림 한다.
SIGN( n) : n이 음수면 -1, 양수이면 1, 0이면 0을 리턴한다.
TRUNC(m, n) : 인수 m을 소수이하 n 자리까지 표시 하는데 절삭 한다.
WIDTH_BUCKET(n, min_value, max_value, num_buckets)
: 인수n을 min_value, max_value 범위로 num_buckets 만큼 등급을 나누어 표시한다.
3. SQL> select mod(10, 3) "10을 3으로 나눈 나머지",
2 power(3, 2) "3의 제곱",
3 abs(-12) "-12의 절대값"
4 from dual;
10을 3으로 나눈 나머지 3의 제곱 -12의 절대값
---------------------- ---------- ------------
1 9 12
SQL> select ceil(12.7) from dual;
CEIL(12.7)
----------
13
SQL기초강좌_숫자 및 날짜함수
숫자함수
4. SQL> select floor(12.7) from dual;
FLOOR(12.7)
-----------
12
SQL> select round(12.567, 1) from dual;
ROUND(12.567,1)
---------------
12.6
SQL> select trunc(12.567, 1) from dual;
TRUNC(12.567,1)
---------------
12.5
SQL기초강좌_숫자 및 날짜함수
5. --ROUND, TRUNC 함수의 두 번째 argument를 생략하면 default로 0
SQL> select round(45.23), round(45.23,0), trunc(45.23), trunc(45.23,0) from dual;
ROUND(45.23) ROUND(45.23,0) TRUNC(45.23) TRUNC(45.23,0)
------------ -------------- ------------ --------------
45 45 45 45
-- -의 의미는 소수이상의 의미, -3은 소수이상3자리 즉 백단위를 의미한다.
SQL> SELECT sal, ROUND(sal, -3), TRUNC(sal, -3) FROM emp WHERE ROWNUM
< 6;
SAL ROUND(SAL,-3) TRUNC(SAL,-3)
---------- ------------- ---------------
800 1000 0
1600 2000 1000
1250 1000 1000
2975 3000 2000
1250 1000 1000
SQL기초강좌_숫자 및 날짜함수
6. -- 아래 SIGN함수는 n이 음수면 -1, 양수이면 1, 0이면 0을 리턴한다.
SQL> select sign(200-100), sign(100-200), sign(100-100) from dual;
SIGN(200-100) SIGN(100-200) SIGN(100-100)
------------- ------------- -------------
1 -1 0
-- sal값을 1부터 5000까지의 값을 기준으로 10개의 등급을 나누어서 표시
SQL> select ename, sal, width_bucket(sal, 1, 5001, 10) "sal 등급" from emp;
ENAME SAL sal 등급
---------- ---------- ----------
SMITH 800 2
ALLEN 1600 4
……
KING 5000 10
TURNER 1500 3
ADAMS 1100 3
JAMES 950 2
FORD 3000 6
MILLER 1300 3
SQL기초강좌_숫자 및 날짜함수
7. SQL기초강좌_숫자 및 날짜함수
날짜함수
[Date Function]
ADD_MONTHS(date, n) : date에 n달을 추가한다. date값을 반환하며 n은 정수이다.
CURRENT_TIME : 현재 세션의 date값을 반환 한다.(SYSDATE와 유사)
EXTRACT({year|month|day|hour|minute|second}) FROM (date) : 날짜 값을 가진 데이터
(date)로부터 원하는 날짜 영역을 추출
LAST_DAY(date) : date를 포함하는 달의 마지막 날을 반환, date값을 반환 한다.
MONTHS_BETWEEN(date1, date2) : date1과 date2의 차이를 달 수로 표현, 정수를 반
환하며 차이가 1개월 미만인 경우는 1보다 작은 소수를 반환한다. 즉 (date1 – date2)
를 나타낸 것이라고 생각하면 된다.
NEXT_DAY(date, c) : 날짜 date를 포함해서 이후에 나타나는 첫 번째 c요일을 반환 한
다.
NEW_DATE(date, z1, z2) : timezone z1형태를 z2형태로 날짜와 시간을 리턴한다.
ROUND(date, fmt) : date를 지정한 포맷 형식에 맞춰 표시하는데 반올림 한다.
SYSDATE : 해당 시스템의 현재 날짜 및 시간을 반환
SYSTIMESTAMP : 오라클 9i이후에서 추가 되었으며 SYSDATE와 마찬가지로 해당 시스
템의 현재 날짜 및 시간을 반환 한다. TIMESTAMP는 DATETIME의 확장이며 보다 정교
한 시간을 나타낼 수 있다.
TRUNC(date, fmt) : date를 지정한 포맷 형식에 맞춰 표시하는데 절삭 한다.
8. SQL기초강좌_숫자 및 날짜함수
날짜함수
[ROUND, TRUNC함수의 fmt 문자열]
YYYY , YYY , YY , Y , YEAR : 년도의 첫날(7월1일부터 반올림)
Q : 분기의 첫날(분기의 두번째 달 16일부터 반올림)
MONTH , MON, MM : 월의 첫날(16일부터 반올림)
W : 월의 첫날과 같은 요일을 가진 그주의 일자를 출력
DDD, DD : 일(정오를 지나면 반올림)
DAY, DY, D : 주의 첫 요일(수요일 정오가 지나면 반올림)
HH, HH12, HH24 : 시단위
MI : 분단위
9. --현재 시스템의 시간 및 날짜를 확인
SQL> column sysdate format a10
SQL> column systimestamp format a35
SQL> select sysdate, systimestamp from dual;
SYSDATE SYSTIMESTAMP
---------- -----------------------------------
14/09/08 14/09/08 11:22:50.593000 +09:00
-- 현재 세션의 NLS_DATE_FORMAT을 확인
SQL> select * from nls_session_parameters where parameter =
'NLS_DATE_FORMAT';
PARAMETER VALUE
------------------------------------------------------------
NLS_DATE_FORMAT RR/MM/DD
SQL기초강좌_숫자 및 날짜함수
10. SQL> select current_date from dual;
CURRENT_
--------
14/09/08
SQL> select sessiontimezone from dual;
SESSIONTIMEZONE
---------------------------------------------
+09:00
SQL> alter session set nls_date_format='yyyy.mm.dd hh24:mi:ss';
세션이 변경되었습니다.
SQL기초강좌_숫자 및 날짜함수
11. SQL> select current_date from dual;
CURRENT_DATE
-------------------
2014.09.08 12:45:46
SQL> SELECT EXTRACT(YEAR FROM DATE '2014-01-01'),
2 EXTRACT(MONTH FROM DATE '2014-01-01')
3 FROM DUAL;
EXTRACT(YEARFROMDATE'2014-01-01') EXTRACT(MONTHFROMDATE'2014-01-01')
--------------------------------- ----------------------------------
2014 1
SQL기초강좌_숫자 및 날짜함수