출처 : 2006년 백승민 제작.
( http://cafe.daum.net/statsas , http://statwith.pe.kr )
오라클(ORACLE) 기본 함수|작성자 하야야
SQL Functions
1. 수치함수
2. 문자값을 반환하는 문자 함수
3. NLS 문자 함수
4. 수치값을 반환하는 문자함수
5. 일시 함수
6. 일반적인 비교 함수
7. 변환 함수
8. LARGE OBJECT(LOB) 함수
9. 수집 함수
10. 계층 함수
11. XML 함수
12. 인코딩 함수와 디코딩 함수
13. NULL 함수
14. 환경 함수 와 식별자 함수
15. 집계 함수
16. 분석 함수
17. Object 참조 함수
18. 모델 함수
19. 기타 단일행 함수
단일행 함수
단일행 함수는 쿼리 테이블 또는 뷰의 모든 행에 대하여 단일 결과 행을 반환한다. 이 함수는 select lists,where 구문,START WITH, CONNECT BY 구문, HAVING구문을 지정할수 있다.
1. 수치함수
함수명 설명
002.ABS 절대값을 반환한다.
003.ACOS n의 역코사인(arc cosine)값을 반환한다.
007.ASIN n의 역사인(arc sine)값을 반환한다.
008.ATAN n의 역탄젠트(arc tangent)값을 반환한다.
009.ATAN2 ATAN2(n,m)은 atan2(n/m)과 같으며, n/m의 역탄젠트(arc tangent)값을 반환한다.
013.BITAND 인수1과 인수2의 비트에 대한 AND연산을 수행하여 정수를 반환한다.
016.CEIL 인수에서 지정한 수치를 올림하여 정수를 구하는 함수이다.
026.COS n(라디안으로 표현되는 각도)의 코사인값을 반환한다.
027.COSH n(라디안으로 표현되는 각도)의 쌍곡 코사인값(hyperbolic cosine)을 반환한다
044.EXP e의 n 제곱 값을 반환한다.
050.FLOOR 지정한 숫자보다 작거나 같은 정수 중에서 최대값을 반환한다
067.LN 입력값의 자연 로그 값을 반환한다.
070.LOG LOG(m,n)에서 밑을 m으로 한 n의 로그 값을 반환.
078.MOD n2을 n1으로 나눈 나머지값을 반환.
080.NANVL 입력 값 n2가 Nan(숫치가 아닌)라면, 대체 값 n1을 반환. n2가 NaN이 아니라면, n2를 반환
102.POWER n2의 n1승 값을 반환.
118.REMAINDER n2를 n1으로 나눈 나머지를 반환
120.ROUND (number) n값을 소수점 이하를 integer를 기준으로 반올림하여 반환한다
130.SIGN n의 부호를 반환.
131.SIN n의 사인(sine)값을 반환.
132.SINH n의 쌍곡선 사인(hyperbolic sine)을 반환.
134.SQRT n의 제곱근을 반환.
159.TAN n의 사인(tangent)값을 반환.
160.TANH n의 쌍곡선 탄젠트(hyperbolic tangent)을 반환.
185.TRUNC (number) 인수 n1을 소수점 자리 파라미터 n2 이하를 절삭.
199.WIDTH_BUCKET 동일한 넓이를 갖는 히스토그램을 생성.
2. 문자값을 반환하는 문자 함수
함수명 설명
018.CHR 10진수 n 에 대응하는 아스키코드를 반환.
022.CONCAT char1과 char2를 연결하여 반환한다
057.INITCAP 입력 문자열 중에서 각 단어의 첫 글자를 대문자로 나머지는 소문자로 변환하여 반환한다
071.LOWER 입력된 문자열을 소문자로 변환한다
072.LPAD 지정된 자리수 n으로부터 expr1을 채우고,왼편의 남은 공간에 expr1을 채운다.
073.LTRIM 문자열 char 좌측으로부터 set으로 지정된 모든 문자를 제거한다.
081.NCHR 유니코드 문자를 반환.
087.NLS_INITCAP 각 단어의 처음 문자를 대문자로, 나머지 문자를 소문자로 변환하여 char를 반환한다
088.NLS_LOWER 모든 문자를 소문자로 변환하여 반환한다.
089.NLSSORT 입력 문자열을 소팅하여 스트링을 반환한다.
090.NLS_UPPER 입력 문자열을 모두 대문자로 변환한 문자열을 반환한다.
115.REGEXP_REPLACE 지정한 정규 표현을 만족하는 부분을, 지정한 다른 문자열로 치환합니다.
116.REGEXP_SUBSTR 지정한 정규 표현을 만족하는 부분 문자열을 반환.
119.REPLACE 파라미터로 주어지는 첫번째 문자열에서, 두번째 문자열을 모두 세번째 문자열로 바꾼 후 결과를 반환한다.
125.RPAD 인수 expr1 오른편으로 인수 expr2로 지정한 문자를 길이 필요에 따라 반복하여 n만큼 붙여준다
126.RTRIM 인수 char의 오른쪽 끝에서 부터 set으로 지정된 모든 문자를 제거한다.
133.SOUNDEX char의 음성 표현을 가지는 문자열을 반환.
147.SUBSTR 문자열 Char에서 position 문자 위치로부터 substring_length 문자 길이만큼 문자열을 추출하여 반환.
181.TRANSLATE from_string에서 각 문자를 to_string안의 대응하는 문자로 치환하여 expr을 반환.
183.TREAT 인수의 선언형을 변경.
184.TRIM 문자열부터 선행 또는 후행(양쪽)문자를 제거.
191.UPPER 모든 문자를 대문자로 변환.
3. NLS 문자 함수
함수명 설명
084.NLS_CHARSET_DECL_LEN NCHAR열의 선언된 폭을 반환.
085.NLS_CHARSET_ID 문제셋 이름에 상응하는 ID번호를 반환.
086.NLS_CHARSET_NAME ID번호 number에 상응하는 문자 세트의 이름을 반환.
4. 수치값을 반환하는 문자함수
함수명 설명
005.ASCII 주어진 char의 첫 문자의 아스키 값에 상응하는 10진수값을 반환한다.
058.INSTR 문자열중에서 지정한 문자가 처음 나타나는 위치를 숫자로 반환.
066.LENGTH 인수 char의 길이를 반환한다
114.REGEXP_INSTR 지정한 조건(정규 표현)을 만족하는 부분의 최초의 위치(무슨 문자인지)를 반환.
5. 일시 함수
함수명 설명
004.ADD_MONTHS 일자 date에 특정 개월수 integer를 더한 값을 반환한다
032.CURRENT_DATE 현재 세션의 날짜 정보를 Date 데이터 형으로 반환한다.
033.CURRENT_TIMESTAMP 현재 session의 날짜와 시간 정보를 반환한다
035.DBTIMEZONE 데이터 베이스 time zone의 값을 반환한다
045.EXTRACT (datetime) 특정 날짜,시간 값이나 날짜 값 표현식으로부터 지정된 날짜 영역의 값을 추출하여 반환한다
051.FROM_TZ timestamp 데이터형과 time zone데이터 형을 TIMESTAMP WITH TIME ZONE 데이터형으로 변환.
062.LAST_DAY 해당 날짜가 속한 달의 마지막 날짜를 반환한다.
069.LOCALTIMESTAMP timestamp의 현재 날짜와 시각을 출력한다.
079.MONTHS_BETWEEN 일자 date1과 date2 사이의 월을 계산한다
082.NEW_TIME date,zone1시간대를 zone2 시간대로 출력.
083.NEXT_DAY 해당일을 기준으로 명시된 요일의 다음 날짜를 변환.
093.NUMTODSINTERVAL n을 INTERVAL DAY TO SECOND 문자로 변경한다.
094.NUMTOYMINTERVAL n을 INTERVAL YEAR TO MONTH문자로 변경한다
121.ROUND (date) 포맷 모델 fmt에 의해 지정한 단위로 반올림된 날짜를 반환한다
128.SESSIONTIMEZONE 현재 세션의 시간대역(time zone)을 반영한다
152.SYS_EXTRACT_UTC 협정 세계시간 UTC (Coordinated Universal Time?formerly Greenwich Mean Time)을 반환
157.SYSDATE 데이터 베이스가 있는 OS의 일자와 시간을 반환한다
158.SYSTIMESTAMP 시스템의 날짜를 반환한다
165.TO_CHAR (datetime) 사용자가 지정한 폼을 갖는 varchar2 형식의 데이터로 변환한다
169.TO_DSINTERVAL INTERVAR DAY TO SECOND값으로 변환한다.
178.TO_TIMESTAMP TIMESTAMP 데이터형의 값으로 변환한다.
179.TO_TIMESTAMP_TZ TIMESTAMP WITH TIME ZONE 데이터형으로 변환한다.
180.TO_YMINTERVAL INTERVAL YEAR TO MONTH 형태로 변경한다
186.TRUNC (date) 날짜를 년,월,일을 기준으로 반올림하거나 절삭한다.
187.TZ_OFFSET 문장이 실행된 일자에 근거한 인수에 상응하는 time zone offset을 반환한다
6. 일반적인 비교 함수
함수명 설명
052.GREATEST 하나 이상의 인수중에서 가장 큰 값을 반환.
065.LEAST 인수 EXPR의 리스트 중에서 가장 작은 값을 반환.
7. 변환 함수
함수명 설명
006.ASCIISTR 주어진 문자열의 아스키 문자열을 반환.
012.BIN_TO_NUM 비트(2진수) 벡터를 동등한 수치(10진수)로 변환.
015.CAST 데이터 형식이나 collection 형식을 다른 데이터 형식이나 collection 형식으로변환.
017.CHARTOROWID CHAR, VARCHAR2, NCHAR, or NVARCHAR2 데이터형태의 값으로부터 ROWID형으로 변환.
021.COMPOSE 완전한 정규화된 형태의 유니코드를 반환.
023.CONVERT 문자세트를 다른 문자세트로 문자열을 변환.
037.DECOMPOSE 입력과 같은 문자 세트로 분해후의 UNICODE 문자열을 반환.
056.HEXTORAW 16진수를 raw값으로 변환.
093.NUMTODSINTERVAL n을 INTERVAL DAY TO SECOND 문자로 변경.
094.NUMTOYMINTERVAL n을 INTERVAL YEAR TO MONTH문자로 변경한다.
110.RAWTOHEX RAW을 16진수의 문자로 변환.
111.RAWTONHEX RAW을 NVARCHAR2 형태의 16진수로 변환.
123.ROWIDTOCHAR rowid 값을 VARCHAR2형식으로 변환.
124.ROWIDTONCHAR rowid값을 NVARCHAR2형식으로 변환.
127.SCN_TO_TIMESTAMP 시스템 변경 번호(SCN)로 평가되는 수치를 인수로 취하여, SCN과 관련된 가까운 timestamp를 반환.
161.TIMESTAMP_TO_SCN timestamp와 관련된 시스템 변경 번호(system change number,SCN)을 반환.
162.TO_BINARY_DOUBLE 배정밀도 부동소수점을 반환.
163.TO_BINARY_FLOAT 단순정밀도(single-precision) 부동 소수점수(floating-point number)를 반환.
164.TO_CHAR (character) 데이터 베이스 문자 세트로 변환.
165.TO_CHAR (datetime) 지정된 포맷의 VARCHAR2 데이터 타입의 값으로 변환.
166.TO_CHAR (number) VARCHAR2 데이터형의 값으로 변환.
167.TO_CLOB NCLOB값을 CLOB값으로 변환.
168.TO_DATE char을 날짜형 데이터 타입값으로 변환.
169.TO_DSINTERVAL INTERVAR DAY TO SECOND값으로 변환.
170.TO_LOB LONG또는 LONG ROW값을 LOB값으로 변환.
171.TO_MULTI_BYTE multibyte 문자를 상응하는 single-byte 문자로 변환한 문자를 반환.
172.TO_NCHAR (character) 문자열,CLOB,NCLOB 값을 각국 문자 세트로 변환.
173.TO_NCHAR (datetime) national character set으로 변환.
174.TO_NCHAR (number) n을 national character set으로 변환.
175.TO_NCLOB CLOB값을 NCLOB값으로 변환.
176.TO_NUMBER expr을 NUMBER 데이터형의 값으로 변환.
177.TO_SINGLE_BYTE multibyte문자를 그에 상응하는 single-byte문자로 변환하여 char을 반환.
178.TO_TIMESTAMP CHAR,VARCHAR2,NCHAR,NVARCHAR2 데이터형의 char을 TIMESTAMP 데이터형의 값으로 변환.
179.TO_TIMESTAMP_TZ CHAR,VARCHAR2,NCHAR,NVARCHAR2데이터형의 char을 TIMESTAMP WITH TIME ZONE 데이터형으로 변환.
180.TO_YMINTERVAL CHAR,VARCHAR2,NCHAR,NVARCHAR2 데이터형의 문자열을 INTERVAL YEAR TO MONTH 형태로 변경
182.TRANSLATE ... USING char을 데이터 베이스 문자세트와 각국어 문자 센트사이의 변환에 대한 지정된 문자 세트로 변경.
189.UNISTR 텍스트 문자열을 인수로 취하고, 각국어 문자 세트로 반환.
8. LARGE OBJECT(LOB) 함수
함수명 설명
011.BFILENAME 서버 파일 시스템의 물리 LOB 바이너리 파일과 연관된 BFILE locator를 반환.
042.EMPTY_BLOB, EMPTY_CLOB LOB 변수를 초기화하기 위하여 쓰이거나, 또는 INSERT 문이나 UPDATE 문에서 empty LOB 위치를 반환.
9. 수집 함수
함수명 설명
014.CARDINALITY nested table에서 원소의 수를 반환.
020.COLLECT 선택된 행으로부터 입력된 형태의 중첩 테이블을 생성.
103.POWERMULTISET 입력된 중첩(nested)테이블의 공백이 아닌 모든 부분집합(submultisets)을 소유한 중첩 테이블의 중첩된 테이블을 반환.
104.POWERMULTISET_BY_CARDINALITY 중첩 테이블과 cardinality(주어진 수학적 집합에서 요소들의 개수)를 취해서, 지정한 카디나리트의 중첩 테이블의 모든 비공백 부분집합(submultisets이라고 불리는)을 소유하는 중첩 테이블의 중첩테이블을 반환.
129.SET 중첩 테이블에서 중복을 배제하여 반환.
10. 계층 함수
함수명 설명
149.SYS_CONNECT_BY_PATH 루트로 부터 node로 열의 값 Path를 반환.
11. XML 함수
함수명 설명
039.DEPTH 상관 변수를 가지는 UNDER_PATH조건에 의해 지정된 PATH에서 레벨의 수를 반환.
043.EXISTSNODE node의 존재여부를 확인하여 그 결과를 반환.
046.EXTRACT (XML) XML 플래그먼트(fragment)를 포함한 XMLType 인스턴스를 반환.
047.EXTRACTVALUE node의 스칼라 값을 반환.
098.PATH 지정된 자원에서 상대적인 경로를 반환.
151.SYS_DBURIGEN 특정 열 또는 행 오브젝트에 대한 DBURIType 데이터 타입의 URL을 생성.
155.SYS_XMLAGG 입력 받은 모든 문서를 하나의 XML문서를 통합.
156.SYS_XMLGEN 스칼라값,object type,xml type 인스턴스를 XML문서로 변형.
200.XMLAGG XML fragment(조각)의 집합체를 취해서, 집계된 XML 문서를 반환.
GROUP BY 질의에서 XML 데이타를 그룹으로 분류 또는 집계하는 함수.
201.XMLCOLATTVAL XML 단편(fragment)을 생성하고, 각각의 XML 단편(fragment)이 속성 name을 포함한 name열을 가지는 결과 XML으로 확장.
202.XMLCONCAT 둘 이상의 XML 값을 연결하는 함수.
203.XMLELEMENT XMLType 타입의 instance를 반환.
관계형 값을 XML 요소로 변형시키는 함수.
204.XMLFOREST 각 인수의 파라미터를 XML로 변환하고, 변환된 인수를 연결한 XML 단편(fragment)을 반환.
관계형 값 목록으로부터 XML 요소의 목록(일명: '포리스트(forest)')을 생성하는 함수.
205.XMLSEQUENCE XMLType에 있는 top-level 노드의 varray를 반환.
커서의 각 행에 대하여 XMLSequence 형태로써 XML문서를 반환.
206.XMLTRANSFORM 스타일 쉬트를 인스턴스로 적용하고, XMLType를 반환.
12. 인코딩 함수와 디코딩 함수
함수명 설명
036.DECODE 일반적인 프로그래밍 언어의 IF문을 SQL 문자 또는 PL/SQL안으로 끌여들여 사용하기 위하여 만들어진 오라클함수.
041.DUMP 지정한 데이터의 위치와 길이 등을 지정한 형식으로 반환.
097.ORA_HASH 주어진 표현에 대한 해쉬 값을 계산하는 함수.
198.VSIZE expr의 내부 표현에서 바이트의 수를 반환.
13. NULL 함수
함수명 설명
019.COALESCE 나열된 값을 순차적으로 체크하여 NULL이 아닌 첫번째 인수를 반환.
068.LNNVL 조건의 한쪽 또는 양쪽 연산자가 NULL이 존재할 경우에, 조건문을 평가하기 위한 방법을 제공.
092.NULLIF expr1과 expr2가 같으면, NULL값을 반환.
095.NVL 쿼리의 결과에서 NULL(공백으로 반환)값을 치환.
096.NVL2 지정한 표현이 NULL인지 여부에 근거하여 쿼리의 반환될 값을 판단할수 있다. expr1이 NULL이 아니라면, NVL2는 expr2를 반환한다. 만약 expr1인 NULL이라면, NVL2는 expr3을 반환.
14. 환경 함수 와 식별자 함수
함수명 설명
150.SYS_CONTEXT 문맥 namespace와 관련된 parameter의 값을 반환.
153.SYS_GUID 16바이트로 구성된 고유전역식별자(globally unique identifier,RAW 값)을 생성하여 반환.
154.SYS_TYPEID 피연산자(operand)의 대부분 지정한 형태의 typeid를 반환.
188.UID 세션 사용자의 유일한 식별하는 정수를 반환.(로그인 유저)
192.USER VARCHAR2 형태를 가지는 세션 사용자(로그인 유저)의 이름을 반환.
193.USERENV 현재 세션에 대한 정보를 반환.
15. 집계 함수
Aggregate functions return a single result row based on groups of rows, rather than on single rows. Aggregate functions can appear in select lists and in ORDER BY and HAVING clauses. They are commonly used with the GROUP BY clause in a SELECT statement, where Oracle Database divides the rows of a queried table or view into groups. In a query containing a GROUP BY clause, the elements of the select list can be aggregate functions, GROUP BY expressions, constants, or expressions involving one of these. Oracle applies the aggregate functions to each group of rows and returns a single result row for each group.
If you omit the GROUP BY clause, then Oracle applies aggregate functions in the select list to all the rows in the queried table or view. You use aggregate functions in the HAVING clause to eliminate groups from the output based on the results of the aggregate functions, rather than on the values of the individual rows of the queried table or view.
Many (but not all) aggregate functions that take a single argument accept these clauses:
DISTINCT causes an aggregate function to consider only distinct values of the argument expression.
ALL causes an aggregate function to consider all values, including all duplicates.
For example, the DISTINCT average of 1, 1, 1, and 3 is 2. The ALL average is 1.5. If you specify neither, then the default is ALL.
All aggregate functions except COUNT(*) and GROUPING ignore nulls. You can use the NVL function in the argument to an aggregate function to substitute a value for a null. COUNT never returns null, but returns either a number or zero. For all the remaining aggregate functions, if the data set contains no rows, or contains only rows with nulls as arguments to the aggregate function, then the function returns null.
You can nest aggregate functions. For example, the following example calculates the average of the maximum salaries of all the departments in the sample schema hr:
SELECT AVG(MAX(salary)) FROM employees GROUP BY department_id;
AVG(MAX(SALARY))
----------------
10925
This calculation evaluates the inner aggregate (MAX(salary)) for each group defined by the GROUP BY clause (department_id), and aggregates the results again.
The aggregate functions are:
함수명 설명
010.AVG 지정된 컬럼에 대한 조건을 만족하는 행중에서 Null을 제외한 평균을 반환.
020.COLLECT 선택된 행으로부터 입력된 형태의 중첩 테이블을 생성.
024.CORR 수치 쌍에 대한 상관 계수를 반환.
025.CORR_* (CORR 참조)는 Pearson's 상관계수를 계산.
028.COUNT 쿼리에 의해 반환된 행의 수를 반환.
029.COVAR_POP number조합의 세트의 모집단 공분산을 반환.
030.COVAR_SAMP number쌍의 세트의 표본 공분산을 반환.
031.CUME_DIST 값의 그룹에 있는 값의 누적 분포치를 계산.
038.DENSE_RANK ORDER BY절에 사용된 컬럼이나 표현식에 대하여 순위를 부여하는데 RANK()와 달리 동일 순위 다음의 순위는 동일 순위의 수와 상관없이 1 증가된 값을 돌려준다
048.FIRST 주어진 소트 지정에 대해서 FIRST 또는 LAST로서 순위를 주어서 행의 세트로부터 값의 세트에 운영하는 집계와 분석 함수.
053.GROUP_ID 지정된 GROUP BY 결과로부터 중복된 그룹을 구별.
054.GROUPING ROLLUP이나 CUBE 연산자와 함께 사용하여 GROUPING 함수에 기술된 컬럼이 그룹핑 시 즉, ROLLUP이나 CUBE 연산시 사용이 되었는지를 보여 주는 함수.
055.GROUPING_ID 행과 관련되는 GROUPING 비트 벡터에 대응되는 수치를 반환.
061.LAST 행을 서열화 시켜서 마지막 행을 추출.
075.MAX 인수중에서 최대값을 반환.
076.MEDIAN 중앙값 또는 값의 정렬후에 중앙값이 보간된 값을 반환.
077.MIN 인수중에서 최소값을 반환.
099.PERCENT_RANK 그룹 수에 대한 값의 순위 퍼센트를 반환.
100.PERCENTILE_CONT 연속된 분포 모델을 가정한 역 분포 함수(inverse distribution function).
101.PERCENTILE_DISC 이산 분포 모형을 가정하는 역 분포 함수.
108.RANK 값의 그룹에서 값의 순위를 계산.
117.REGR_ (Linear Regression) Functions 선형회귀함수는 정규 최소 제곱 회귀 선상을 수치 쌍의 세트에 적합.
135.STATS_BINOMIAL_TEST 단지 두개의 유효한 값이 존재하는 이분 변수(두개의 배타적인 값을 가지는 변수)에 대해서 이용되는 정확 확률 테스트.
136.STATS_CROSSTAB 교차분석(crosstab)은 두개의 명목 변수를 분석하는 방법.
137.STATS_F_TEST STATS_F_TEST함수는 두개의 분산이 유의한 차가 있는지 테스트.
138.STATS_KS_TEST 두개의 표본이 같은 모집단에 속하고 있는지 또는 같은 분포를 가지는 모집단에 속하고 있는지 테스트 하는 Kolmogorov-Smirnov함수.
139.STATS_MODE 가장 큰 빈도를 가지는 값을 반환.
140.STATS_MW_TEST A Mann Whitney test는 2개의 독립 표본을 비교.
141.STATS_ONE_WAY_ANOVA 일원분산분석 함수(STATS_ONE_WAY_ANOVA)는 분산의 다른 2개 추정치 비교에 의해 통계적 유의성에 대한 평균(그룹 또는 변수에 대한)의 유의한 차를 검증.
142.STATS_T_TEST_* t검정에서는, 평균치의 차이의 유의성을 측정.
143.STATS_WSR_TEST 대응쌍표본의 윌콕스 부호 순위 검증을 수행하며,표본간의 차이가 zero로부터 유의한 차이가 있는지 검정.
144.STDDEV Number의 조합인 expr의 표본표준편차를 반환.
145.STDDEV_POP 모집단 표준 편차를 계산하고, 모집단 분산의 제곱근값을 반환.
146.STDDEV_SAMP 누적 표본 표준편차를 계산하고, 표본 분산의 제곱근값을 반환.
148.SUM expr의 값의 합을 반환.
195.VAR_POP Null값들을 제거한후에 Number 세트의 모집단 분산을 반환.
196.VAR_SAMP null들을 제거한후에 number의 세트의 표본분산을 반환.
197.VARIANCE expr의 분산을 반환.
16. 분석 함수
Analytic functions compute an aggregate value based on a group of rows. They differ from aggregate functions in that they return multiple rows for each group. The group of rows is called a window and is defined by the analytic_clause. For each row, a sliding window of rows is defined. The window determines the range of rows used to perform the calculations for the current row. Window sizes can be based on either a physical number of rows or a logical interval such as time.
Analytic functions are the last set of operations performed in a query except for the final ORDER BY clause. All joins and all WHERE, GROUP BY, and HAVING clauses are completed before the analytic functions are processed. Therefore, analytic functions can appear only in the select list or ORDER BY clause.
Analytic functions are commonly used to compute cumulative, moving, centered, and reporting aggregates.
analytic_function::=
Description of the illustration analytic_function.gif
analytic_clause::=
Description of the illustration analytic_clause.gif
query_partition_clause::=
Description of the illustration query_partition_clause.gif
order_by_clause::=
Description of the illustration order_by_clause.gif
windowing_clause ::=
Description of the illustration windowing_clause.gif
The semantics of this syntax are discussed in the sections that follow.
analytic_function
Specify the name of an analytic function (see the listing of analytic functions following this discussion of semantics).
arguments
Analytic functions take 0 to 3 arguments. The arguments can be any numeric datatype or any nonnumeric datatype that can be implicitly converted to a numeric datatype. Oracle determines the argument with the highest numeric precedence and implicitly converts the remaining arguments to that datatype. The return type is also that datatype, unless otherwise noted for an individual function.
analytic_clause
Use OVER analytic_clause to indicate that the function operates on a query result set. That is, it is computed after the FROM, WHERE, GROUP BY, and HAVING clauses. You can specify analytic functions with this clause in the select list or ORDER BY clause. To filter the results of a query based on an analytic function, nest these functions within the parent query, and then filter the results of the nested subquery.
Notes on the analytic_clause:
You cannot specify any analytic function in any part of the analytic_clause. That is, you cannot nest analytic functions. However, you can specify an analytic function in a subquery and compute another analytic function over it.
You can specify OVER analytic_clause with user-defined analytic functions as well as built-in analytic functions. See CREATE FUNCTION .
query_partition_clause
Use the PARTITION BY clause to partition the query result set into groups based on one or more value_expr. If you omit this clause, then the function treats all rows of the query result set as a single group.
To use the query_partition_clause in an analytic function, use the upper branch of the syntax (without parentheses). To use this clause in a model query (in the model_column_clauses) or a partitioned outer join (in the outer_join_clause), use the lower branch of the syntax (with parentheses).
You can specify multiple analytic functions in the same query, each with the same or different PARTITION BY keys.
If the objects being queried have the parallel attribute, and if you specify an analytic function with the query_partition_clause, then the function computations are parallelized as well.
Valid values of value_expr are constants, columns, nonanalytic functions, function expressions, or expressions involving any of these.
order_by_clause
Use the order_by_clause to specify how data is ordered within a partition. For all analytic functions except PERCENTILE_CONT and PERCENTILE_DISC (which take only a single key), you can order the values in a partition on multiple keys, each defined by a value_expr and each qualified by an ordering sequence.
Within each function, you can specify multiple ordering expressions. Doing so is especially useful when using functions that rank values, because the second expression can resolve ties between identical values for the first expression.
Whenever the order_by_clause results in identical values for multiple rows, the function returns the same result for each of those rows. Please refer to the analytic example for SUM for an illustration of this behavior.
Restriction on the ORDER BY Clause
When used in an analytic function, the order_by_clause must take an expression (expr). The SIBLINGS keyword is not valid (it is relevant only in hierarchical queries). Position (position) and column aliases (c_alias) are also invalid. Otherwise this order_by_clause is the same as that used to order the overall query or subquery.
ASC | DESC
Specify the ordering sequence (ascending or descending). ASC is the default.
NULLS FIRST | NULLS LAST
Specify whether returned rows containing nulls should appear first or last in the ordering sequence.
NULLS LAST is the default for ascending order, and NULLS FIRST is the default for descending order.
Analytic functions always operate on rows in the order specified in the order_by_clause of the function. However, the order_by_clause of the function does not guarantee the order of the result. Use the order_by_clause of the query to guarantee the final result ordering.
windowing_clause
Some analytic functions allow the windowing_clause. In the listing of analytic functions at the end of this section, the functions that allow the windowing_clause are followed by an asterisk (*).
ROWS | RANGE
These keywords define for each row a window (a physical or logical set of rows) used for calculating the function result. The function is then applied to all the rows in the window. The window moves through the query result set or partition from top to bottom.
ROWS specifies the window in physical units (rows).
RANGE specifies the window as a logical offset.
You cannot specify this clause unless you have specified the order_by_clause.
The value returned by an analytic function with a logical offset is always deterministic. However, the value returned by an analytic function with a physical offset may produce nondeterministic results unless the ordering expression results in a unique ordering. You may have to specify multiple columns in the order_by_clause to achieve this unique ordering.
BETWEEN ... AND
Use the BETWEEN ... AND clause to specify a start point and end point for the window. The first expression (before AND) defines the start point and the second expression (after AND) defines the end point.
If you omit BETWEEN and specify only one end point, then Oracle considers it the start point, and the end point defaults to the current row.
UNBOUNDED PRECEDING
Specify UNBOUNDED PRECEDING to indicate that the window starts at the first row of the partition. This is the start point specification and cannot be used as an end point specification.
UNBOUNDED FOLLOWING
Specify UNBOUNDED FOLLOWING to indicate that the window ends at the last row of the partition. This is the end point specification and cannot be used as a start point specification.
CURRENT ROW
As a start point, CURRENT ROW specifies that the window begins at the current row or value (depending on whether you have specified ROW or RANGE, respectively). In this case the end point cannot be value_expr PRECEDING.
As an end point, CURRENT ROW specifies that the window ends at the current row or value (depending on whether you have specified ROW or RANGE, respectively). In this case the start point cannot be value_expr FOLLOWING.
value_expr PRECEDING or value_expr FOLLOWING
For RANGE or ROW:
If value_expr FOLLOWING is the start point, then the end point must be value_expr FOLLOWING.
If value_expr PRECEDING is the end point, then the start point must be value_expr PRECEDING.
If you are defining a logical window defined by an interval of time in numeric format, then you may need to use conversion functions.
If you specified ROWS:
value_expr is a physical offset. It must be a constant or expression and must evaluate to a positive numeric value.
If value_expr is part of the start point, then it must evaluate to a row before the end point.
If you specified RANGE:
value_expr is a logical offset. It must be a constant or expression that evaluates to a positive numeric value or an interval literal. Please refer to "Literals " for information on interval literals.
You can specify only one expression in the order_by_clause
If value_expr evaluates to a numeric value, then the ORDER BY expr must be a numeric or DATE datatype.
If value_expr evaluates to an interval value, then the ORDER BY expr must be a DATE datatype.
If you omit the windowing_clause entirely, then the default is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
Analytic functions are commonly used in data warehousing environments. In the list of analytic functions that follows, functions followed by an asterisk (*) allow the full syntax, including the windowing_clause.
함수명 설명
010.AVG * 지정된 컬럼에 대한 조건을 만족하는 행중에서 Null을 제외한 평균을 반환.
024.CORR * 수치 쌍에 대한 상관 계수를 반환.
028.COUNT * 쿼리에 의해 반환된 행의 수를 반환.
029.COVAR_POP * number조합의 세트의 모집단 공분산을 반환.
030.COVAR_SAMP * number쌍의 세트의 표본 공분산을 반환.
031.CUME_DIST 값의 그룹에 있는 값의 누적 분포치를 계산.
038.DENSE_RANK ORDER BY절에 사용된 컬럼이나 표현식에 대하여 순위를 부여하는데 RANK()와 달리 동일 순위 다음의 순위는 동일 순위의 수와 상관없이 1 증가된 값을 돌려준다
048.FIRST 주어진 소트 지정에 대해서 FIRST 또는 LAST로서 순위를 주어서 행의 세트로부터 값의 세트에 운영하는 집계와 분석 함수.
049.FIRST_VALUE * 값의 정렬된 세트에서 첫번째 값을 반환.
060.LAG 현재 행을 기준으로 이전 값을 참조하는 함수.
061.LAST 행을 서열화 시켜서 마지막 행을 추출.
063.LAST_VALUE * 윈도우에서 정렬된 값중에서 마지막 값을 반환.
064.LEAD 현재 행을 기준으로 이후의 값을 참조하는 함수.
075.MAX * 인수중에서 최대값을 반환.
077.MIN * 인수중에서 최소값을 반환.
091.NTILE 순서화된 데이터를 expr에 의해 지정된 bucket의 수로 분한하여, 각 행을 적절한 bucket 번호를 할당.
출력 결과를 사용자가 지정한 그룹 수로 나누어 출력하는 함수.
099.PERCENT_RANK 그룹 수에 대한 값의 순위 퍼센트를 반환.
100.PERCENTILE_CONT 연속된 분포 모델을 가정한 역 분포 함수(inverse distribution function).
101.PERCENTILE_DISC 이산 분포 모형을 가정하는 역 분포 함수.
108.RANK 값의 그룹에서 값의 순위를 계산.
109.RATIO_TO_REPORT 값의 세트의 합에 대한 값의 비율을 계산.
117.REGR_ (Linear Regression) Functions * 선형회귀함수는 정규 최소 제곱 회귀 선상을 수치 쌍의 세트에 적합.
122.ROW_NUMBER 분할별로 정렬된 결과에 대해 순위를 부여하는 기능.
1로 시작하는 order_by_clause에서 지정된 행의 순위 순서로, 적용되는 각 행에 unique 순서를 할당.
144.STDDEV * Number의 조합인 expr의 표본표준편차를 반환.
145.STDDEV_POP * 모집단 표준 편차를 계산하고, 모집단 분산의 제곱근값을 반환.
146.STDDEV_SAMP * 누적 표본 표준편차를 계산하고, 표본 분산의 제곱근값을 반환.
148.SUM * expr의 값의 합을 반환.
195.VAR_POP * Null값들을 제거한후에 Number 세트의 모집단 분산을 반환.
196.VAR_SAMP * null들을 제거한후에 number의 세트의 표본분산을 반환.
197.VARIANCE * expr의 분산을 반환.
17. Object 참조 함수
함수명 설명
040.DEREF 인수 expr의 오브젝트 참조를 반환.
074.MAKE_REF object 인식자가 주 키로 근거하고 있는 object 테이블에서 object view의 행 또는 object 표의 행에 대한 REF를 생성.
112.REF 인수로써 오브젝트 테이블 또는 오브젝트 뷰의 행과 연관된 상관 변수(테이블 별명)를 취한다
113.REFTOHEX 인수 expr을 16진수로 변환.
194.VALUE object 테이블에 저장된 object instance를 반환.
18. 모델 함수
함수명 설명
034.CV 포뮬러의 좌측 항에 정의된 multi-cell reference를 우측 항으로 복사하는 기능을 제공.
우측 항 계산을 위해 좌측 항의 값 이용하기.
059.ITERATION_NUMBER 델 규칙에 따라 완료된 반복을 나타내는 정수를 반환.
105.PRESENTNNV cell_reference가 존재하고 NULL이 아닌 경우, model_clause이 실행되기 전에 expr1을 반환.
106.PRESENTV cell_reference가 존재할때 expr1을 반환한다. 그 이외에는 expr2를 반환.
107.PREVIOUS 각 iteration의 초기에 cell_reference의 값을 반환.
19. 기타 단일행 함수
함수명 설명
152.SYS_EXTRACT_UTC 협정 세계시간 UTC (Coordinated Universal Time?formerly Greenwich Mean Time)을 추출.
190.UPDATEXML XMLType인스턴스와 XPath값 쌍을 취하고, 업데이트된 값을 가지는 XMLType 인스턴스를 반환.
/* 함수를 쓸 때는 테이블이 따로 필요가 없습니다. */
01. 숫자형(integer, number 등) 함수
a. ABS(n) : absolute 의 약자로 파라미터 n 값의 절대값을 반환하는 SQL 함수
(ex) 123과 -123 이라는 숫자를 파라미터로 받아와서 그 절대값을 반환한다.
select abs(123), abs(-123)
from dual;
b. SIGN(n) : 파라미터 n 값이 음수인지 양수인지의 여부를 반환하는 SQL 함수
n 이 0 보다 클 경우 : 1 , n 이 0 보다 작을 경우 : -1, n 이 0 일 경우 : 0 을 반환한다.
(ex) 123, -123 그리고 0 값의 음, 양, 0 을 파라미터로 받아와서 그 결과를 반환한다.
select sign(123), sign(-123), sign(0)
from dual;
c. ROUND(n, i) : 파라미터 n 값의 소수점 이하 i + 1 번째 자리에서 반올림 한 결과를 반환하는 SQL
함수 i 값은 생략이 가능한데 0 일 경우 : ROUND(n, 0) = ROIND(n) 으로 그 결과
값은 같다.
(ex) 0.123456 값을 파라미터로 받아서 소수점 3번째와 5번째에서 반올림 한
결과를 반환한다.
select round(0.123456, 2), round(0.123456, 4)
from dual;
123.45678 값을 파라미터로 받아서 소수점 3번째와 정수 2번째 자리에서 반올림 한
결과를 반환한다.
select round(123.45678, 2) left_ro, round(123.45678, -2) rigth_ro
from dual;
d. TRUNC(n,1 n2) : truncate 의 약자로, n1 의 값을 파라미터로 받아서 n2 번째 자리에서 잘라낸
값을 반환 하는 함수. 연산 방법은 ROUND 와 비슷하다.
(ex) 123.456 값을 파라미터로 받아서 0 번째 자리와 정수 2번째 자리, 그리고
소수점 3번째 자리에서 잘라낸 값을 반환한다.
select trunc(123.456, 0) zero_tr, trunc(123.456, -2) left_tr,
trunc(123.456, 2) right_tr
from dual;
e. CEIL(n) : 파라미터 n 값 보다 같거나 가장 큰 정수를 반환하는 함수
(ex) 123.4567 과 0.123 값을 파라미터로 받아서 비교를 한 후 같은 값이나 가장 큰 정수
값을 반환한다.
select ceil(123.4567) ceil1, ceil(0.123) ceil2
from dual;
123 < 123.4567 < 124 이므로 124 라는 결과 값이 나온다.
0 < 0.123 < 1 이므로 1 이라는 결과 값이 나온다.
f. FLOOR(n) : 파라미터 n 값 보다 같거나 작은 가장 큰 정수를 반환하는 함수
(ex) 123.456 과 0.123 값을 파라미터로 받아서 비교를 한 후 같거나 작은 가장 큰
정수를 반환한다.
select floor(123.456) floor1, floor(0.123) floor2
from dual;
123 < 123.456 < 124 이므로 123 을 결과로 반환
0 < 0.123 < 1 이므로 0 을 결과로 반환
g. MOD(n2, n1) : 파라미터 n2 를 n1 으로 나눈 몫이 아니라 나머지 값을 반환하는 함수
파라미터 타입 : NUMBER 타입만 올 수 있다.
ni 이 0 이면 n2 를 그대로 반환한다.
(연산식) 나머지 값 = n2 - n1 * FLOOR(n2 / n1)
(ex) 123.456 을 3, 12.34, -2 로 나눈 나머지 값과 -123.456 을 -2 로 나눈 나머지
결과 값을 반환한다.
select mod(123.456, 3) mod1, mod(123.456, 12.34) mod2,
mod(123.456, -2) mod3, mod(-123.456, -2) mod4
from dual;
h. REMAINDER(n2, n1) : 파라미터 n2 를 n1 로 나눈 나머지 값을 반환하는 함수
MOD 함수와 연산은 같다.
파라미터 타입 : NUMBER, BINARY_FLOAT, BINARY_DOUBLE 타입
(연산식) 나머지 값 = n2 - n1 * ROUND(n2 / n1)
(ex) 123.456 을 3, 12.34, -3 으로 나눈 나머지 값과 -123.456 을 -3 으로
나눈 나머지 결과 값을 반환한다.
select remainder(123.456, 3) rem1, remainder(123.456, 12.34) rem2,
remainder(123.456, -3) rem3, remainder(-123.456, -3) rem4
from dual;
i. POWER(n2, n1) : 파라미터 n2 의 n1 제곱값을 반환하는 함수
파라미터 n2 의 값이 양수 : n1 의 값은 정수나 실수
파라미터 n2 의 값이 음수 : n1 의 값은 반드시 정수
(ex) 12 를 2와 3, 그리고 2.3 을 제곱값으로 해서 그 결과를 반환한다.
select power(12, 2) p1, power(12, 3) p2, power(12, 2.3) p3
from dual;
j. SQRT(n) : 파라미터 n 의 제곱근 값을 반환하는 함수
파라미터 타입 : NUMBER, BINARY 숫자 타입
NUMBER 타입이 올 경우 : n 값은 0 이 올 수 없다.
(ex) : 파라미터 2와 3 값의 제곱근 값을 결과로 반환한다.
select sqrt(2) sq1, sqrt(3) sq2
from dual;
k. 일반적인 수학식과 같은 계산 로직을 가진 함수들
: SIN(n), SINH(n), COS(n), COSH(n), TAN(n), TAN2(n), ASIN(n), ACOS(n), ATAN(n),
LOG(n2, n1), LN(n), EXP(n)
02. 문자형(CHAR, VARCHAR2, NCHAR 등) 함수
a. CONCAT(char1, char2) : 파라미터 char1 과 char2 의 문자열은 연결하여 그 결과를 반환하는
함수
파라미터 타입 : CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB
(ex) '로미오' 와 '줄리엣' 이라는 문자열을 연결하여 그 결과를 반환한다.
select concat('로미오', '줄리엣')
from dual;
b. INITCAP(char) : 파라미터인 char 의 첫 문자를 대문자로 변경하는 함수
파라미터 타입 : CHAR, VARCHAR2, NCHAR, NVARCHAR2
파라미터 구분자(delimiter) 로 문자열의 첫 문자를 구별
구분자 : 알파벳을 제외한 모든 문자
(ex) 'you are a girl' 이라는 문자열에서 띄여쓰기는 구분자로 표현되어 각 단어
의 첫 문자를 대문자로 변경한다.
select initcap('you are a girl')
from dual;
c. LOWER(char) & UPPER(char) : 파라미터 char 의 모든 문자를 소문자로 변경하거나 대문자로
변경하는 함수
파라미터 타입 : CHAR, VARCHAR2, NCHAR, NVARCHAR2,CLOB,NCLOB
(ex) 'abcdEF' 라는 문자열을 가지고 모든 문자를 소문자나 대문자로 변경한다.
select lower('abcdEF') lo, upper('abcdEF') up
from dual;
d. LPAD(expr1, n [, expr2]) & RPAD(expr1, n [, expr2]) : 파라미터 expr1 을 n 자리 길이 만큼 늘
려서 반환하는 함수
파라미터 expr1 이 n 보다 작을 경우 : n - expr1 길이 만큼 expr2 로 채운다.
expr2 는 생략 가능하나 생략 하면 공백으로 채운다.
d-1. LPAD : expr2 가 왼쪽에서부터 채워나간다.
d-2. RPAD : expr2 가 오른쪽에서부터 채워나간다.
d-3. n : 문자의 자릿수를 의미하나 문자셋에 따라 바이트 수를 의미하기도 한다.
(ex) 파라미터 'abc' 를 7 자리 길이만큼 늘려서 '-' 나 '#' 로 빈 공간을 채운다.
select lpad('abc', 7, '-') lp, rpad('abc', 7, '#') rp
from dual;
e. LTRIM(char [, set]) & RTRIM(char [, set]) : 파라미터 char 에서 set 으로 지정된 문자를 제거
한 결과를 반환하는 함수
파라미터 타입 : CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, NCLOB
e-1. LTRIM : 왼쪽에서부터 지정된 문자를 제거
e-2. RTRIM : 오른쪽에서부터 지정된 문자를 제거
e-3. set : 생략이 가능하고 디폴트 값은 공백 문자가 사용된다.
(ex) 파라미터 'ABCDE' 에서 지정된 문자를 왼쪽이나 오른쪽에서 제거한 결과를
반환한다.
select ltrim('ABCDE', 'AB') lt, rtrim('ABCDE', 'DE') rt
from dual;
f. SUBSTR(char, position, length) : 파라미터 char 문자열에서 position 으로 지정된 위치로부터
length 개의 문자를 떼어낸 결과를 반환하는 함수
f-1. length : 생략이 가능하나 지정을 안할 경우 : position 위치로부터 문자열
끝까지 반환한다.
f-2. position : 값이 0 이면 위치값은 디폴트로 1이 적용되어 문자열의 맨 왼쪽
첫 번째 자리부터 length 개 만큼 문자열을 잘라낸다.
음수일 경우 : 문자열의 맨 끝 오른쪽 첫 번째 자리부터 length 개 길이만큼 잘라서
그 결과를 반황한다.
(ex) 파라미터 'i am a boy' 문자열에서 3번째 위치에서부터 5개의 문자를 떼어내어
그 결과를 반환한다.
select substr('i am a boy', 3, 5)
from dual;
g. SUBSTRB(char, position, length) : 위 SUBSTR 함수와 비슷한 기능을 하는 함수
- B : BYTE 를 의미한다.
h. REPLACE(char, search_string, replace_string) : 파라미터 char 문자열 중 일부를 다른 문자열
로 변경하여 그 결과를 반환하는 함수
- char 문자열에서 search_string 문자열을 찾아서 replace_string 문자열로 변경한다.
- replace_string : 생략 가능, 생략하면 search_string 을 null 로 변경한다.
(ex) 파라미터 'you are not alone' 에서 'you' 를 찾아 'we' 로 변경한 결과를 반환한다.
select replace('you are not alone', 'you', 'we')
from dual;
i. TRANSLATE(expr, from_string, to_string) : 위 REPLACE 함수와 비슷한 기능을 하는 함수
- expr 문자열에서 from_string 문자열을 찾아 to_string 값으로 변경한 결과를 반환한다.
- 문자 자체를 1:1 대응해서 변경한다.
- 파라미터 생략 불가능, null 이 올 경우 모든 문자열이 null 로 결과가 반환된다.
(ex) 'i am a boy' 문자열에서 'bou' 대신에 null 로 변경하지만 그 결과 값은 null 로 반환
된다.
select replace('i am a boy', 'boy', null) re,
translate('i am a boy', 'boy', null) tr
from dual;
j. TRIM([LEADING, TRAILING, BOTH] [, trim_character] [FROM] trim_source)
: 왼쪽이나 오른쪽, 그리고 양쪽 모두에서 지정된 문자나 공백을 제거한 결과를 반환하는 함수
- trim_character : 문자열이 아닌 문자 하나만 가능
03. 숫자형 데이터를 반환하는 문자형 함수
a. ASCII(char) : 파라미터 char 의 ASCII 코드값을 반환하는 함수
- char : 문자 하나가 올 수 있으나 문자열로 올 경우 맨 처음 문자의 코드값만 반환한다.
- 파라미터 타입 : CHAR, VARCHAR2, NCHAR, NVARCHAR2
- 데이터베이스 : EBCDIC 코드값을 반환한다.
b. INSTR(string, search_string, position, occurrence) : 파라미터 string 문자열에서 특정문자를
찾아 그 시작 위치를 반환하는 함수
- string : 대상 문자열
- search_string : 찾는 문자열
- position 문자열 찾는 시작 위치
- 생략이 가능하고 디폴트는 1 이다.
- occurrence : 몇 번쨰인지 명시
- 생략이 가능하고, 디폴트는 1 이다.
c. LENGTH(char) : 파라미터 char 문자열의 길이를 반환하는 함수
- 종류 : LENGTHB, LENGTHC, LENGTH2, LENGTH4
04. 날짜형 함수
a. 현재 날짜를 반환하는 함수
- SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP,
LOCALTIMESTAMP
- SYSDATE : 시스템(DBMS)의 현재 날짜(시간을 포함)를 반환하는 날짜형 함수
- CURRENT_DATE : 현재 세션의 시간대를 기준으로 한 현재 날짜를 반환하는 함수
b. 일반적인 날짜형 함수
b-1. ADD_MONTH(date, integer) : 파라미터 date(임의의 날짜)에 개월 수를 더한 결과를
반환하는 함수
- 데이터 타입 : 날짜형 데이터 타입
- integer 가 기본이나 실수형 타입도 가능
b-2. MONTH_BETWEEN(date1, date2) : 두 파라미터 date1, date2 사이의 개월 수가 얼마인지
구해서 그 결과를 반환하는 함수
- 날짜를 비교하는 파라미터이므로 생략은 불가능
b-3. NEXT_DAY(date, char) : date 이후 날짜 중에서 주중 char 로 명시된 첫 번째 일자를
반환하는 함수
- 요일명을 명시 하나 숫자도 가능하다. (1 : 일요일 ~ 7 : 토요일 까지만 가능)
- 축약어를 사용 가능( 월요일 : 월, 화요일 : 화, ... )
- 요일명이 영문일 경우 : 축약어를 사용하여 요일명의 세 글자만 해당
b-4. LAST_DAY(date) : 파라미터 date 와 같은 달의 마지막 날짜를 반환하는 함수
b-5. ROUND(date, fmt) : 파라미터 date 를 지정된 범위(fmt) 에 의해 명시된 단위로 반올림한
결과를 반환하는 함수
b-6. TRUNC(date, fmt) : 파라미터 date 를 fmt 형식에 맞게 날짜를 잘라낸 결과를 반환하는 함수
b-7. EXTRACT([YEAR] [MONTH] [DAY] [HOUR] {MINUTE] [SECOND] ... FROM datetime)
- 날짜 정보에서 특정한 연도, 월, 시간, 분, 초 등을 추출하여 그 결과를 반환하는 함수
c. 기타 날짜형 함수
c-1. DBTIMEZONE : 데이터 베이스의 시간대를 반환하는 함수
c-2. SESSIONTIMEZONE : ORACLE 에 접속되어 있는 SISSON 의 시간대를 반환하는 함수
05. NULL 관련 함수
a. NVL(expr1, expr2) : 파라미터 expr1 이 null 이 아니면 expr1 을 반환하고, null 이면 expr2 를
반환하는 함수
b. NVL2(expr1, expr2, expr3) : 파라미터 expr1 이 null 이면 expr3 을 반환하고, null 이 아니면
expr2 를 반환하는 함수
c. NULLIF(expr1, expr2) : 파라미터 expr1 과 expr2 를 비교해서 같으면 null 을, 같지않으면
expr1 을 반환하는 함수
d. COALESCE(expr1, expr2, ...) : 파라미터 리스트에서 첫 번째로 null 이 아닌 파라미터를
반환하는 함수
(ex) 'A', 'B', 'C', ... 중에 null 이 아닌 첫 번째 파라미터를 반환한다.
select coalesce('A', 'B', null) first,
coalesce(null, 'B', 'C', null) second,
coalesce(null, null, 'C', null) third
from dual;
e. LNNVL(condition) : 조건(condition) 을 체크하여 조건 결과 값이 FALSE 나 UNKNOWN 이면
TRUE 를, TRUE 이면 FALSE 를 반환하는 함수
- 파라미터 : 구하고자 하는 조건의 반대의 경우
06. 변환 함수
a. 문자형 데이터로 형변환하는 함수 : TO_CHAR
- 파라미터 character, datetime, number 타입 등 임의의 데이터를 문자형 데이터로 변경하여
그 결과를 반환하는 함수
- TO_CHAR(character), TO_CHAR(datetime), TO_CHAR(number)
b. 숫자형 데이터로 형변환하는 함수
b-1. TO_NUMBER(expr, fmt) : 파라미터 expr 을 NUMBER 타입으로 변환하여 그 결과를
반환하는 함수
- expr : CHAR, VARCHAR2, NCHAR, NVARCHAR2, BINARY_FLOAT, BINARY_DOUBLE
- fmt : 생략 가능, 명시하면 지정된 포맷타입으로 데이터를 반환
b-2. TO_BINARY_FLOAT & TO_BINARY_DOUBLE
- 각각 BINARY_FLOAT 와 BINARY_DOUBLE 타입으로 변환하여 그 결과를 반환하는 함수
- 파라미터 타입 : 문자형 데이터 타입, NUMBER 타입
- TO_NUMBER 함수처럼 fmt 모델 사용 가능
c. 날짜형 데이터로 형변환하는 함수
c-1. TO_DATE(char, fmt) : 파라미터 char 데이터를 fmt 형식으로 DATE 타입의 변환된 결과를
반환하는 함수
- 파라미터 타입 : CHAR, VARCHAR2, NCHAR, NVARCHAR2
c-2. TO_TIMESTAMP(char, fmt) : 파라미터 char 데이터를 fmt 형식으로 TIMESTAMP 타입으로
변환하여 그 결과를 반환하는 함수
- 파라미터 타입 : CHAR, VARCHAR2, NCHAR, NVARCHAR2
c-3. TO_TIMESTAMP_TZ(char, fmt) : 파라미터 char 데이터를 fmt 형식으로 TIMESTAMP WITH
TIME ZONE 타입으로 변환한 결과를 반환하는 함수
- 파라미터 타입 : CHAR, VARCHAR2, NCHAR, NVARCHAR2
d. DECODE( expr, search1, result1, search2, result2, ..., default_result)
- default_result값은 생략할 수 있으며 생략시 null을 반환한다.
- 함수 파라미터에는 컬럼, 문자상수, 함수, 서브쿼리, 또다른 decode함수가 올 수 있다.
- 파라미터 expr 을 검사하여 search1 에 해당되면 result1 을, search2 에 해당되면 result2 를
반환하는 함수
- 모든 search 값에 해당하지 않는 경우 : default_result 값을 반환
- 프로그래밍의 IF...ELSE...ELSE... 와 같은 기능을 하는 SQL 함수
- 동등 비교시에만 가능
select employee_id, ifrst_name || ' ' || last_name names,
decode(round((sysdate - hire_date)/365), 5, '5년 근속',
10, '10년 근속', round((sysdate - hire_date)/365)) work_years
from employees
order by employee_id;
e. CASE : 함수가 아닌 표현식(expression)의 일종
- 표현식 : 하나 or 그 이상의 값과 연산자, 함수가 조합된 것
- DECODE 와 비슷하나 확장된 기능 제공
[기본형] - decode 함수처럼 동등비교를 한다고 할 수 있다
CASE 대상값 WHEN 비교값1 THEN 처리1
WHEN 비교값2 THEN 처리2
...
ELSE 디폴트 처리
END
[검색형] - 동등을 포함해 여러 연산자를 사용한 조건을 주는 것이 가능
CASE WHEN 비교조건1 THEN 처리1
WHEN 비교조건2 THEN 처리2
...
ELSE 디폴트 처리
END
select id, name
case gender when 'm' then '남성'
when 'f' then '여성'
else '' end case_gender
from members;
/* 예문을 쓰기 위해 ORACLE 10g 의 OE 계정 안에 있는 customers 테이블 이용 */
1. (ex) 성별 'M'이나 'F' 를 남자와 여자로 나타내는 예문
select customer_id, cust_first_name,
decode(gender, 'M', '남성', 'F', '여성') de_gender, // gender column 은 성별 컬럼
case gender when 'M' then '남성'
when 'F' then '여성'
else ' '
end case_gender
from customers;
2. select
case when ('xx' = 'condition' and 'ss'= 'condition') then '결과'
when ('aa' = 'condition' and 'ee' <> 'condition' ) then '결과'
when ('bb' <> 'condition' _no and 'kk' = 'condition' ) then '결과'
else 'default 일때 나올 값'
==> 괄호는 있어도 되고 없어도 된다. 묶어주는것이 안정적이다.