[DB:Oracle]SQL - 단일 행 함수
sql 함수에는 단일 행 함수와 그룹 함수가 있다. 그중 단일 행 함수에는 5가지가 있는데, 문자함수는 문자 입력을 받고 문자 및 숫자 값을 반환하며, 숫자함수는 숫자 입력을 받아 숫자 값을 반환한다. 날짜함수는 날짜 데이터에 대해 실행되고, 변환함수는 데이터의 유형을 변환, 그리고 일반함수는 어디에든 사용 가능하다.
문자함수
문자함수도 2종류로 나눌 수 있다. 대소문자 변환함수(lower, upper, initcap)는 말 그대로 대소문자를 바꾸고, 문자 조작 함수에는 아래와 같은 것들이 있다.
concat(expr1, expr2) : 두 인수를 연결해서 문자열로 반환, ||와 같은 역할이며 중첩 가능
substr(expr, 시작위치, 개수) : 문자열에서 시작 위치부터 개수만큼 문자를 반환, 위치 음수 가능, 개수 생략 가능
length(expr) : 문자열의 길이를 반환
instr(expr, 문자) : 문자열에서 특정 문자의 첫 번째 위치를 반환
lpad 또는 rpad(expr, 길이, 기호) : 길이에 맞춰 문자를 오른쪽(lpad) 또는 왼쪽(rpad) 정렬, 나머지는 기호로 채움
replace(expr, 문자1, 문자2) : 문자열에서 문자1을 문자2로 교체
trim(문자, expr) : 특정 문자가 문자열의 접두어/접미어일 때 해당 문자 삭제
숫자함수
숫자함수에서는 자릿수를 나타내는 경우가 많은데, 10의 자리는 -1로, 1의 자리는 0 또는 생략, 소수 첫째 자리는 1, 이 순서대로 적으면 된다.
round(expr, 자릿수) : 값을 반올림하여 자릿수만큼의 값 반환
trunc(expr, 자릿수) : 자릿수만큼의 값만 반환하고 나머지는 버림
mod(expr, 숫자) : 값을 숫자로 나누고 나머지를 반환
위에 #이 뜨는 것은, 내가 salary 컬럼 길이를 a20으로 맞췄기 때문에 데이터 출력 자리가 충분하지 않다는 뜻이다.
날짜함수
날짜함수는 산술이 가능하며, sys 소유인 dual 테이블을 사용하여 현재 서버의 날짜 및 시간을 반환할 수 있다. 작성 시 select sysdate from dual; 형식으로 한다.
months_between(expr1, expr2) : 두 날짜 간 월 수를 반환
add_months(expr, 숫자) : 날짜에 숫자만큼 월 수를 더해서 반환
next_day(expr, 요일) : 날짜 이후에 오는 해당 요일의 날짜 반환
last_day(expr) : 월의 마지막 날짜 반환
round와 trunc 함수도 사용 가능하며, 자릿수 대신 'MONTH'나 'YEAR'을 쓴다.
변환함수
여기서 날짜 형식으로는 YYYY(숫자), YY(연도 2자리 수), YEAR(전체 영어), MM(월 2자리 수), MONTH(전체 영어), MON(월 3자리 영어), DD(숫자), DAY(요일 전체 영어), DY(요일 3자리 영어)가 있다. 영어의 경우 MON/Mon/mon 처럼 대소문자도 구분한다. 또한 시간 형식은 HH:MI:SS 와 HH24:MI:SS AM 이 있다.
to_number(문자, model) : 문자를 숫자로 ex) $100 -> 100
to_date(문자, model) : 문자를 날짜로
to_char(날짜 또는 숫자, model) : 날짜나 숫자를 문자로
만약 날짜에 sp를 붙이면 문자 형식으로 출력하겠다는 의미이며, th를 붙이면 서수가 되고, fm은 공백 등을 제거하여 깔끔하게 출력해주는 역할을 한다.
일반함수
일반함수를 사용할 때 주의할 것은, 함수가 적용되는 컬럼의 데이터와 출력 값의 데이터 타입이 일치해야 한다.
NVL(컬럼, 값) : 해당 컬럼의 null 데이터를 값으로 변환
NVL2(컬럼, 값1, 값2) : 컬럼 데이터가 null이 아니면 값1, 맞으면 값2 반환
NULLIF(데이터1, 데이터2) : 두 데이터를 비교해서 같으면 null, 다르면 데이터1 반환
COALESCE(데이터1, 데이터2, ...) : 데이터들을 순서대로 비교해서 null이 아닌 첫 번째 데이터를 반환
참고로 쿼리 구문에서 큰 따옴표가 사용되는 경우는 딱 2가지 존재하는데, 컬럼명을 alias로 바꿀 때와 to_char 함수 출력 시 문자가 포함될 때다. 그리고 dual 테이블은 날짜 데이터 외에도 단순 계산 결과를 볼 때도 사용할 수 있다.