Oracle - 단일 행 (숫자, 날짜) 및 추가된 단일 행 함수
Posted 07 3, 2010 23:51, Filed under: DataBase/Oracle
# 한번의 광고 클릭으로, 당신을 대신해서 불우이웃을 도울 기회가 많아집니다.

# 숫자 함수
SQL> SELECT ABS(-15) FROM DUAL;# 날짜 함수
ABS(-15)
----------
15
SQL> SELECT CEIL(15.7) FROM DUAL;
CEIL(15.7)
----------
16
SQL> SELECT FLOOR(15.7) FROM DUAL;
FLOOR(15.7)
-----------
15
SQL> SELECT COS(180*3.14/180) FROM DUAL;
COS(180*3.14/180)
-----------------
-.99999873
SQL> SELECT EXP(4) FROM DUAL;
EXP(4)
----------
54.59815
SQL> SELECT LOG(10, 100) FROM DUAL;
LOG(10,100)
-----------
2
SQL> SELECT MOD(11, 4) FROM DUAL;
MOD(11,4)
----------
3
SQL> SELECT POWER(3, 2) FROM DUAL;
POWER(3,2)
----------
9
SQL> SELECT ROUND(15.193, 1) FROM DUAL;
ROUND(15.193,1)
---------------
15.2
SQL> SELECT ROUND(15.193, -1) FROM DUAL;
ROUND(15.193,-1)
----------------
20
SQL> SELECT SIGN(-15) FROM DUAL;
SIGN(-15)
----------
-1
SQL> SELECT TRUNC(15.79, 1) FROM DUAL;
TRUNC(15.79,1)
--------------
15.7
SQL> SELECT TRUNC(15.79, 2) FROM DUAL;
TRUNC(15.79,2)
--------------
15.79
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
------------
04-JUL-10
SQL> SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
---------------------------------------------------------------------------
04-JUL-10 09.27.22.407650 AM +09:00
SQL> SELECT HIREDATE, ADD_MONTHS(HIREDATE, 1) FROM EMP WHERE EMPNO = 7782;
HIREDATE ADD_MONTHS(H
------------ ------------
09-JUN-81 09-JUL-81
SQL> SELECT HIREDATE, LAST_DAY(HIREDATE) FROM EMP WHERE EMPNO = 7782;
HIREDATE LAST_DAY(HIR
------------ ------------
09-JUN-81 30-JUN-81
SQL> SELECT HIREDATE, NEXT_DAY(HIREDATE, 'THU') FROM EMP WHERE EMPNO = 7782;
HIREDATE NEXT_DAY(HIR
------------ ------------
09-JUN-81 11-JUN-81
SQL> SELECT HIREDATE, NEW_TIME(HIREDATE, 'GMT', 'PDT') FROM EMP WHERE EMPNO = 7782;
HIREDATE NEW_TIME(HIR
------------ ------------
09-JUN-81 08-JUN-81
SQL> SELECT HIREDATE, MONTHS_BETWEEN(SYSDATE, HIREDATE) FROM EMP WHERE EMPNO = 7782;
HIREDATE MONTHS_BETWEEN(SYSDATE,HIREDATE)
------------ --------------------------------
09-JUN-81 348.851627
SQL> SELECT ROUND(TO_DATE('27-OCT-98', 'DD-MON-YY'), 'YEAR') FROM DUAL;
ROUND(TO_DAT
------------
01-JAN-99
SQL> SELECT TRUNC(TO_DATE('27-OCT-98', 'DD-MON-YY'), 'YEAR') FROM DUAL;
TRUNC(TO_DAT
------------
01-JAN-98
# Oracle 9i 추가
- NVL2 (Column, Express1, Express2)
- 해당 컬럼이 NULL이 아니면 express1의 값을, NULL이면 express2의 값을 리턴 해 줍니다.
SQL> SELECT empno, ename, comm, NVL2(comm, comm*1.1, 0) FROM EMP;- NULLIF (Express1, Express2)
EMPNO ENAME COMM NVL2(COMM,COMM*1.1,0)
---------- ---------- ---------- ---------------------
7368 SMITH 0
7369 SMITH 0
7499 ALLEN 300 330
7521 WARD 500 550
7566 JONES 0
7654 MARTIN 1400 1540
7698 BLAKE 0
7782 CLARK 0
7788 SCOTT 0
7839 KING 0
- Express1과 Express2의 값을 비교하여 그 값이 같으면 NULL을 리턴하고 다르면 Expiress1의 값을 리턴해줍니다.
SQL> SELECT empno, ename, comm, NULLIF(comm, 0) FROM EMP;
EMPNO ENAME COMM NULLIF(COMM,0)
---------- ---------- ---------- --------------
7368 SMITH
7369 SMITH
7499 ALLEN 300 300
7521 WARD 500 500
7566 JONES
7654 MARTIN 1400 1400
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
- COALLESCE (Express1, , , , ExpressN)
- Express1이 NULL이 아니면 Express1을 리턴하고, NULL이면 Express2를 Express1과 Express2 모두 NULL이면 ExpressN을 리턴해 줍니다.
SQL> SELECT EMPNO, COMM, SAL, COALESCE(COMM, SAL) FROM EMP;# Oracle 10g 추가
EMPNO COMM SAL COALESCE(COMM,SAL)
---------- ---------- ---------- ------------------
7368 800 800
7369 800 800
7499 300 1600 300
7521 500 1250 500
7566 2975 2975
7654 1400 1250 1400
7698 2850 2850
7782 2450 2450
7788 3000 3000
7839 5000 5000
SQL> SELECT EMPNO, COMM, SAL, COALESCE(COMM, 100) FROM EMP;
EMPNO COMM SAL COALESCE(COMM,100)
---------- ---------- ---------- ------------------
7368 800 100
7369 800 100
7499 300 1600 300
7521 500 1250 500
7566 2975 100
7654 1400 1250 1400
7698 2850 100
7782
- REGEXP 함수의 MetaCharacters

- REGEXP_LIKE
- REGEXP_INSTR
- REGEXP_REPLACE
- REGEXP_SUBSTR
/*
198로 시작되며 년도의 끝자리 수가 1~2를 만족하는 값을 검색합니다.
*/
SQL> SELECT EMPNO, ENAME, HIREDATE FROM EMP
2 WHERE REGEXP_LIKE(TO_CHAR(HIREDATE, 'YYYY'), '^198[1-2]$');
EMPNO ENAME HIREDATE
---------- ---------- ------------
7499 ALLEN 20-FEB-81
7521 WARD 22-FEB-81
7566 JONES 02-APR-81
7654 MARTIN 28-SEP-81
7698 BLAKE 01-MAY-81
7782 CLARK 09-JUN-81
7788 SCOTT 09-NOV-82
7839 KING 17-NOV-81
7900 JAMES 03-NOV-81
7902 FORD 03-NOV-81
7934 MILLER 23-JAN-82
/* 첫 문자가 A로 시작되는 값 */
SQL> SELECT EMPNO, ENAME FROM EMP
2 WHERE REGEXP_LIKE(ename, '^A');
EMPNO ENAME
---------- ----------
7499 ALLEN
7876 ADAMS
/*
문자열에서 ㅣ로 시작되는 단어이며 그 나머지 문자열은 4자리로 구성된 단어의 position을 구하는 문장
*/
SQL> SELECT REGEXP_INSTR('But, soft! What light through yonder window breaks', 'l[[:alpha:]]{4}') as result FROM DUAL;
RESULT
----------
17
/*
문자열에서 s로 시작되는 단어이며 그 나머지 문자열은 3자리로 구성된 단어를 검색합니다. 전체 문자열이 첫번째 position부터 검색하되 두번째 조건을 만족하는 단어의 position을 구하는 문장
*/
SQL> SELECT REGEXP_INSTR('But, soft! What light through yonder window softly greaks', 's[[:alpha:]]{3}', 1, 2) as result FROM DUAL;
RESULT
----------
45
/*
문자열에서 10번째 position부터 o로 시작되는 문자열을 검색하되 두 번재로 조건을 만족하는 단어의 position을 구하는 문장
*/
SQL> SELECT REGEXP_INSTR('But, soft! What light through yonder window breaks?', 'o', 10, 2) as result FROM DUAL;
RESULT
----------
32
/*
문자열에서 ㅣ로 시작되는 단어이며 나머지 문자열은 4자리로 구성된 단어를 sound라는 단어로 변경하는 문장.
*/
SQL> SELECT REGEXP_REPLACE('But, soft! What light through yonder window breaks?', 'l[[:alpha:]]{4}', 'sound') as result FROM DUAL;
RESULT
---------------------------------------------------
But, soft! What sound through yonder window breaks?
/*
문자열에서 l로 시작되는 단어이며 그 나머지 문자열은 4자리 구성된 단어를 검색하는 문장
*/
SQL> SELECT REGEXP_SUBSTR('But, soft! What light through yonder window breaks?', 'l[[:alpha:]]{4}') as result FROM DUAL;
RESUL
-----
light
출처 : 오라클 ACE가 해설하는 NEW SQL & PL/SQL
"DataBase / Oracle" 분류의 다른 글
| Oracle - 바인드 변수에 대하여(테스트) (0) | 2012/05/06 |
| Oracle - 디폴트 롤, DBA, CONNECT, RESOURCE (0) | 2012/04/27 |
| Oracle - 권한 및 롤 관리 (0) | 2012/04/27 |
| Oracle - SQL*PLUS의 SYSDBA 접근 제어 (0) | 2012/04/27 |
| Oracle - PFILE, SPFILE 에 관하여 (0) | 2012/04/27 |
| Oracle - Listener 포트 변경 (0) | 2012/04/27 |
| Oracle - 사용자 패스워드 정책 변경 (0) | 2012/04/03 |
| Oracle - SYS_CONTEXT 함수를 이용하여 접속 세션 정보 추출 (2) | 2011/12/13 |
| Oracle - ASSM(Automatic Segment Space Management) (0) | 2011/09/18 |
| Oracle - 사용자의 테이블 스페이스 검색및 이동 (0) | 2011/09/18 |
# 한번의 광고 클릭으로, 당신을 대신해서 불우이웃을 도울 기회가 많아집니다.
Response :
0 Trackback
,
0 Comment
Trackback URL : http://develop.sunshiny.co.kr/trackback/512