2. 함수
오라클 내장 함수
- 오라클이 자체적으로 제공하는 함수
오라클 함수의 분류
- 단일 행 함수
- 하나의 행 값이 함수에 적용되어 하나의 행으로 리턴된다.
- 함수를 적용할 때나 안할 때나 반환되는 ROW 수는 같다
SUBSTR
단일 문자행 함수
- GROUP 함수
- 하나 이상의 행 값이 적용되어 하나의 값이 리턴된다.
- WHERE 조건절이 없어도 실제 존재하는 ROW 보다 결과로 나온 ROW 수가 적을 수도 있다.
공통점은 결과로 반환하는 ROW 는 하나다.
#
단일 행 함수 - 1. 문자 함수#
LOWER(CHAR)지정된 문자를 소문자로 변환하여 리턴
#
UPPER(CHAR)지정된 문자를 대문자로 변환하여 리턴
#
INITCAP(CAHR)지정된 문자 스트링의 단어 첫 자는 대문자,
나머지는 소문자로 바꾸어 리턴
#
LENGTH(컬럼or문자열)주어진 문자열의 길이를 돌려준다.
- LENGTHB 가 존재한다.
#
LPAD(CHAR1, n[,CHAR2])CHAR1 좌측에 CHAR2 문자를 채워서 n 자리로 만들어 리턴
#
RPAD(CHAR1, n[, CHAR2])CHAR2 우측에 CHAR2 문자를 채워서 n 자리로 만들어 리턴
#
SUBSTR(CHAR, m[, n])CHAR 의 m 번째 문자에서부터 n 개의 문자를 리턴
- INSTRB 와 마찬가지로 SUBSTRB 가 존재한다.
#
INSTR(CHAR, CHAR2)DUAL TABLE
- SYS USER 가 소유하고 있는 단일 행에 단일 컬럼만을 가지는 테이블
- 일시적 산술 연산이나 날짜 연산을 위해 사용한다.
#
LTRIM(CHAR, [,SET])SET 이 아닌 최초의 문자가 나타날 때까지 죄측으로부터 문자를 삭제
#
RTRIM(CHAR, [, SET)SET 이 아는 최초의 문자가 나타날 때까지 지정된 값의 우측에서 문자를 삭제
#
SOUNDEX(CHAR)지정한 단어와 발음이 동일한 문자열을 리턴
주로 조건절에서 사용
#
TRANSLATE(CHAR, S1, S2)모든 S1 을 S2 로 치환 후 리턴
#
CHR(CHAR)지정된 수치와 일치하는 ASCII 코드를 리턴
#
ASCII('CHAR')지정된 문자의 ASCII 값을 돌려준다.
#
REPLACE(CHAR, STR1, STR2)CHAR 에서 STR1을 모두 STR2 로 치환 후 리턴
STR2를 지정하지 않으면 STR1 을 모두 삭제
#
단일 행 함수 - 2. 숫자 함수#
ROUND(n, [, m])n 을 소수점 아래 m 자리까지 반올림한 값을 리턴,
m 이 생략되면, 소수점 아래 값을 반올림한 정수 리턴
m 이 음수이면, 소수점 이상 지정된 자리까지 반올림 (m 이 -2 이면 10단위에서 반올림한 값 리턴)
#
TRUNC(n, [m])n 을 소수점 아래 m 자리까지 남기고 절사한다
m의 사용법은 ROUND 함수의 경우와 동일
#
CEIL(N)지정된 값 이상의 가장 작은 정수를 리턴
#
FLOOR(N)지정된 값 이하의 가장 큰 정수를 리턴
#
POWER(M, n)m 을 n 제곱한 값을 리턴
#
SQRT(n)지정된 값의 루트값(평방근)을 리턴
#
SIGN(n)지정된 값의 음수(-1), 양수(1), 0(0) 여부를 리턴
NULL 이 들어가면 NULL 리턴
#
ABS(n)지정된 값의 절대값 리턴
#
MOD(m, n)n 을 m으로 나눈 나머지를 리턴
n이 0인 경우 m 리턴
CREATE TABLE AS SELECT...
- SELECT 한 결과를 이용하여 바로 테이블을 CREATE 시키고자 할 때
- DDL 이다
- DDL 문장이 실행되면 자동 COMMIT 이 일어나게 된다.
자동 COMMIT 되는 경우
- DDL 이나 DCL 문장을 만났을 때.
- SQL *PLUS 에서 exit 을 이용하여 정상 종료할 때
- Set AutoCommit On 으로 환경이 지정되어 있을 때
#
단일 행 함수 - 3. 날짜 함수SYSDATE
시스템의 일자를 DATE 형으로 보관 하고 있는 가상 컬럼
- SYSDATE 를 이용하면 현재일자를 초 단위까지 알아낼 수 있다.
DATE 형에 시간 더하고 빼기
- 보통 DATE 형을 SELECT 하면 일자 까지만 나온다.
- 시, 분, 초를 보기 위해서 TO_CHAR 함수를 사용할 수 있다.
#
ADD_MONTHS(DATE, n)지정된 월 만큼을 날짜에 더한 결과
#
MONTHS_BETWEEN(DATE1, DATE2)두 개의 일자 간격이 몇 개월인지를 보여준다.
#
NEXT_DAY(DATE, 요일(1-7))두 번째 인수에 1(일요일) 부터 7(토요일) 까지 가능
이 경우 지정한 일자 다음에 나타나는 지정 요일의 날짜 반환
#
LAST_DAY(DATE)지정한 일자가 포함된 월의 말일
#
ROUND(DATE, format)format 에 지정된 형식으로 반올림
#
TRUNC(DATE, format)format 에 지정된 형식으로 잘림
#
TO_CHAR(NUMBER or Date)Date 형이나, Number 형을 문자로
#
TO_NUMBER(CHAR)문자를 숫자로
#
TO_DATE(DATE)문자를 Date 형으로
#
단일 행 함수 - 4. 자료형 무관#
DECODEIF 문의 기능
#
NVLNull 의 치환
#
GREATEST지정된 값들 중 최대 값
#
LEAST지정된 값들 중 최소 값
#
VSIZE지정된 값의 bytes
#
데이터형 변환함수오라클은 문자 ↔ 숫자, 문자 ↔ 날짜 간의 형 변환을 위해 필요한 함수를 제공한다.
#
DATE 를 문자로 TO_CHAR(date, format)format | 설명 |
---|---|
YYYY 또는 SYYY | 년도, S 를 지정하면 기원전 년도 |
YYY YY 또는 Y | 년의 아래 3자리, 2자리, 1자리 |
SYEAR 또는 YEAR | 년을 철자로 |
Q | 분기 |
MM | 월 |
MONTH 또는 MON | 월의 명칭 또는 3문자의 단축형 |
DDD DD 또는 D | 년, 월, 주의 몇번째 날인가를 보여줌 |
DAY 또는 DY | 요일 또는 3문자의 단축형 |
AM 또는 PM | 오전과 오후표시 |
A.M 또는 P.M | 오전과 오후 표시 |
HH 또는 HH12 | 시각 (1-12) |
HH24 | 시각 (0-23) |
MI | 분 |
SS | 초 |
접미사 | 설명 |
---|---|
TH | 서수(DDPH 라고 지정하면 31TH와 같이 나옴) |
SP | 숫자를 철자로 보여준다. (DDSP => FOUR) |
SSTH 또는 THSP | 서수를 철자로 보여준다. (DDSPTH => FOURTH) |
#
숫자를 문자로 TO_CHAR(number, format)format | 설명 |
---|---|
9 | 숫자의 출력 |
0 | 숫자열 앞에 0 표시 |
.(소수점) | 소수점 자리 표시 |
,(Comma) | 지정한 위치에 콤마 표시 |
$ | 달러 표시 |
L | 국가별 화폐단위 표시 |
MI | 오른쪽에 마이너스 부호 |
EEEE | 과학적 표기 |
#
숫자로 변환 가능한 문자열을 숫자로 변환 TO_NUMBERDATE 와 문자열의 연산
날짜를 표현하는 문자열을 TO_DATE 함수를 써서 변환 후 연산해야 한다.
#
그룹함수행들의 집합에 대해 연산을 한 결과를
- 하나의 ROW 로 반환
- 집합 수 만큼 ROW 반환
#
COUNT(COLUMN or *)그룹지어진 행들의 수
- 어떤 형의 컬럼도 올 수 있다
*
로우수를 센다NULL
값이 들어갈 가능성이 없다면*
를 넣는 것과 결과가 동일하다.
그룹함수 사용시의 장점
GROUP 함수를 사용하면 0 rows selected.
의 결과는 나오지 않는다.
PROCEDURE, FUNCTION 등 PL/SQL 블록을 이용한 프로그램을 만들 때
0 rows selected.
라는 결과가 나올 가능성이 있는 QUERY 는 항상 EXCEPTION 처리를 해야한다.
EXCEPTION 처리를 하고 계속 진행하고자 한다면 PL/SQL 블록으로 감싸줘야 한다.
- 그룹 함수를 사용하면 그럴 필요가 없기 때문에 일부러 그룹함수를 사용하는 경우가 있다.
#
MAX그룹지어진 행들의 지정된 컬럼에서 최대값
숫자/문자/날짜 어떤 형의 자료도 쓸 수 있다.
#
MIN그룹지어진 행들의 지정된 컬럼에서 최소값
숫자/문자/날짜 어떤 형의 자료도 쓸 수 있다.
#
SUM그룹지어진 행들의 지정된 컬럼에 대한 합계
- 숫자형의 자료만 쓸 수 있다.
#
AVG그룹지어진 행들의 지정된 컬럼에 대한 평균
- 숫자형의 자료만 쓸 수 있다.
#
STDDEV그룹지어진 행들의 지정된 컬럼에서 표준편차
#
VARIANCE그룹지어진 행들의 지정된 컬럼에서 분산
평균에서의 NULL
0 이 있는 경우와 NULL 이 있는 경우는 완전히 다르다.
평균은 SUM/COUNT 로 구해지는데, NULL 은 COUNT 에서 제외가 된다.