<함수 FUNCTION>
전달된 컬럼값을 읽어들여 함수를 실행한 결과를 반환
- 단일 행 함수 : N개의 값을 읽어들여서 N개의 결과가 나온다(매 행마다 실행)
- 그룹 함수 : N개의 값을 읽어들여서 1개의 결과가 나온다(그룹별로 실행)
>> SELECT문에 단일행과 그룹을 동시에 실행불가능
>> 함수식을 기술할 수 있는 위치 : SELECT절, WHERE절, ORDER BY절, HAVING절
* LENGTH / LENGTHB -> 반환값 NUMBER
LENGTH(컬럼|'문자열') : 해당 문자열의 글자 수를 반환해줌
LENGTHB(컬럼|'문자열') : 해당 문자열의 BYTE수를 반환해줌
- 한글 : XE버전일때 -> 1글자당 3BYTE(ㄱ, ㅏ, 강) 전부 각각 3바이트
EE버전일때(엔터프라이즈, 실무에서 많이씀) -> 얘는 1글자당 2바이트
- 그외 : 1글자당 1BYTE
* INSTR : 문자열에서 특정 문자가 있는 시작위치(INDEX)를 찾아서 반환(반환값은 NUMBER)
****오라클의 인덱스는 0번부터가 아니라 1번부터임
INSTR(컬럼|'문자열', '찾고자하는 문자', [찾을 위치의 시작값, [순번]]) ===> 대괄호는 생략 가능
- 찾을위치 시작값
1: 앞에서부터 찾기 (기본값)
-1 : 뒤에서부터 찾기
* SUBSTR : 문자열에서 특정 문자열을 추출하여 반환
[표현법]
SUBSTR('문자열', POSITION, [LENGTH])
- POSITION : 문자열을 추출할 시작위치 INDEX값
- LENGTH : 추출할 문자의 갯수(생략하면 맨 마지막까지 싹 추출)
* LPAD / RPAD : 문자열을 조회할 때 통일감있게 조회하고자 할 때
LPAD|RPAD('문자열', 최종적으로 반환할 문자의 길이,[덧붙이고자 하는 문자])
* LTRIM / RTRIM : 문자열에서 특정 문자를 제거하고 나머지 반환
* TRIM : 문자열에서 앞/뒤 양쪽에 있는 특정 문자를 제거
LTRIM|RTRIM('문자열', [제거하고자하는문자(생략시공백)])
* LOWER / UPPER / INITCAP : 문자열을 모두 대문자 혹은 소문자로, 단어의 첫글자만
LOWER|UPPER|INITCAP('문자열')
* CONCAT : 두 문자열을 하나로 합쳐서 반환
CONCAT('문자열1', '문자열2') 두개만합치기 가능
* REPLACE : 문자열을 새로운 문자로 바꿀 떄 사용
REPLACE('문자열', '기존문자열', '바꿀문자열')
얘네 다 안나올거같음, 그나마 쓰이면 SUBSTR
* ABS : 숫자의 절대값을 구해주는 함수.
ABS(NUMBER)
* MOD : 두 수를 나눈 나머지 반환
MOD(ANUMBER, BNUMBER) -> ANUMBER를 BNUMBER로 나눈 값
* ROUND : 반올림
ROUND(NUMBER, [소수점몇자리:안쓰면그냥정수로나옴])
소수점몇자리까지 반올림하는법만 좀 눈으로 봐두기
* CEIL : 올림
CEIL(NUMBER) ==> 얘는 소수점몇자리지정불가능무조건정수로
* FLOOR : 내림 ==> 얘도 소수점몇자리지정불가능무조건정수로
얘는 무조건 정수만
* TRUNC : 위치 지정이 가능한 버림
TRUNC(NUMBER, 숫자)
얘는 버림이지만 위치지정이 가능
* POWER : 제곱
POWER(숫자, 제곱)
* SYSDATE : 시스템 날짜 및 시간 반환
* MONTHS_BETWEEN(DATE1, DATE2)
: 두 날짜 사이의 개월 수를 반환
* ADD_MONTHS(DATE, NUMBER) : 특정 날짜에 NUMBER만큼 더한 날짜 반환
* NEXT_DAY : 특정 날짜 이후에 가까운 해당 요일인 날짜를 반환
NEXT_DAY(DATE, 요일(문자|숫자))
숫자 : 1(일요일), 2(월요일), ..... , 6(토요일)
문자 : '토요일', '일요일'
* LAST_DAY : 해당 월의 마지막 날짜 반환
* EXTRACT : 특정 날짜로부터 년|월|일을 추출해서 반환(NUMBER로 반환)
EXTRACT(YEAR FROM '날짜') : 년도 추출
* TO_CHAR : 숫자, 날짜 타입을 문자타입으로 바꿔주는거
반환결과를 특정 형식에 맞게 출력도 가능
[표현법]
TO_CHAR(숫자|날짜, [포맷])
------------------------------------------ 숫자타입 -> 문자타입
포맷
- 9 : 해당자리의 숫자를 의미한다. 해당자리에 값이 없을때 소수점 이상은 공백, 소수점 이하는 0으로 표시
- 0 : 해당자리의 숫자를 의미한다. 해당자리에 값이 없을때 그냥 0으로 표시
- L : 현재 설정된 나라의 화폐단위(LOCAL)
- FM : 9로 치환했을 경우 소수점 이상은 공백제거 소수점 이하는 0을 제거함
숫자를 문자형식으로 바꾸면서 이런 표현이 가능
SELECT TO_CHAR(1234, 'L999999.99') 문자 FROM DUAL;
SELECT '월급루팡 '||EMP_NAME, '가 받는 돈' || TO_CHAR(SALARY, 'L999,999,999') FROM EMPLOYEE;
근데 이것도 시험에 안나올거같음
밑에 날짜를 문자형식으로 출력하는 방법 10가지 넘게 적혀있는데 시험에 절대 안나옴
NVL(컬럼, 컬럼값이 NULL일 때 반환할 값)
NULL값으로 들어가있는것들을 처리해줌
NVL2(컬럼, 컬럼값이 있을 때 반환값, 컬럼값이 NULL일 때 반환값)
NULLIF(비교대상1, 비교대상2)
- 두개의 값이 일치하면 NULL을, 일치하지 않으면 비교대상1 을 반환
SELECT NULLIF('123', '123') FROM DUAL;
실행
DECODE(비교하고자 하는 대상(컬럼|산술연산|함수식), 비교값1, 결과값1, 비교값2, 결과값2, ...)
SWITCH(비교대상){
CASE 비교값1 : 결과값1;
....
DEFAULT :
}
자바의 스위치문과 비슷
SUBSTRING으로 주민등록번호 뒤 첫자리를 구해서 남녀를 구별
CASE WHEN THEN
END
CASE WHEN 조건식1 THEN 결과값1
WHEN 조건식2 THEN 결과값2
...
ELSE 결과값N
자바의 IF-ELSE문과 비슷
단일행 함수 끝