단일함수
숫자함수
함수
|
설명
|
예시
|
ABS
|
숫자의 절댓값
|
SELECT ABS(-100) FROM dual;
-> 결과: 100
|
ROUND(a, b)
|
숫자를 반올림 (a: 변환할 숫자 / b: 반올림할 자리)
* 반올림할 자리가 소수점: 양수 / 정수: 음수
|
SELECT ROUND(12.345, 2) FROM dual;
-> 결과: 12.35
|
TRUNC(a, b)
|
숫자 버림
|
SELECT TRUNC(99.9, -1) FROM dual;
-> 결과: 90
|
MOD(a, b)
|
a를 b로 나누고 나머지 값 조회
|
SELECT MOD(21, 5) FROM dual;
-> 결과: 1
|
CEIL
|
주어진 숫자에서 가장 근접한 큰 정수 조회
|
SELECT CEIL(123.1) FROM dual;
-> 결과: 124
|
FLOOR
|
주어진 숫자에서 가장 근접한 작은 정수 조회
|
SELECT FLOOR(123.9) FROM dual;
-> 결과: 123
|
POWER(a, b)
|
a의 b제곱 조회
|
SELECT POWER(2,3) FROM dual;
-> 결과: 8
|
문자함수
함수
|
설명
|
예시
|
UPPER
|
값 or 컬럼명 대문자 변환
|
SELECT UPPER('abcd') FROM dual;
-> 결과: ABCD
|
LOWER
|
값 or 컬럼명 소문자 변환
|
SELECT LOWER('ABCD') FROM dual;
-> 결과: abcd
|
INITCAP
|
단어의 앞 글자만 대문자로 변환
|
SELECT INITCAP('new york') FROM dual;
-> 결과: New York
|
LENGTH
|
문자 길이 조회
|
SELECT LENGTH('안녕?') FROM dual;
-> 결과: 3
|
LENGTHB
|
문자의 바이트 조회
|
SELECT LENGTHB('안녕?') FROM dual;
-> 결과: 7
|
INSTR
|
특정 문자의 위치(순서) 반환
|
SELECT INSTR('가나다라', '다') FROM dual;
-> 결과: 3
|
INSTRB
|
특정 문자의 위치(바이트) 반환
|
SELECT INSTRB('가나다라','다') FROM dual;
-> 결과: 7
|
SUBSTR(a,b,c)
|
대상의 시작 위치부터 선택한 개수만큼 조회
* a문자열의 b번째부터 c개만큼 출력
|
SELECT SUBSTR('가나다',2,1) FROM dual;
->결과: 나
|
SUBSTRB
|
대상의 시작 위치부터 선택한 바이트만큼 조회
|
SELECT SUBSTRB('가나다',2) FROM dual;
-> 결과: 나다
|
L/RPAD(a,b,c)
|
빈칸만큼 특정문자로 채움(왼쪽/오른쪽)
* a문자열이 b개수만큼 채워지지 않으면 c로 채움
|
SELECT LPAD('123', 5, 0) FROM dual;
-> 00123
|
L/RTRIM
|
왼쪽/오른쪽의 공백문자 삭제
|
SELECT RTRIM(' 안녕 ') FROM dual;
-> 결과: ' 안녕' (6글자 -> 4글자로 줄음)
|
TRIM(a FROM b)
|
양 끝의 특정 문자 삭제
* a문자를 b문자열에서 지움
* 특정 문자를 지정하지 않으면 공백이 삭제됨
|
SELECT TRIM('a' FROM 'a12a') FROM dual
-> 결과: '12'
|
* 옵션 지정 가능
LEADING: 왼쪽에서 제거
TRAILING: 오른쪽에서 제거
BOTH: 양쪽(아무 옵션 없을 때 실행)
|
SELECT
TRIM(LEADING 'a' FROM 'a123a')
FROM dual;
-> 결과: '123a;
|
날짜함수
* 날짜 포맷: YYYY/YY(년) MM(월) DD(일) HH/HH24(시) MI(분) SS(초) DAY(요일)
함수
|
설명
|
예시
|
SYSDATE
|
현재 시스템의 날짜와 시간 나타냄
|
SELECT SYSDATE FROM dual;
|
SYSTIMESTAMP
|
초의 소수점까지(밀리세컨드) 제어
* FF 뒤에 숫자를 붙여 자릿수 지정 가능
|
SELECT TO_CHAR(SYSTIMESTAMP, 'HH:MI:SS.FF2')
FROM dual;
|
MONTH_BETWEEN
|
두 날짜 사이 개월 수
|
SELECT
MONTHS_BETWEEN(SYSDATE, SYSDATE-500)
FROM dual;
|
ADD_MONTH
|
주어진 날짜에 개월 수를 더함
|
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, '6'))
FROM dual;
|
NEXT_DAY
|
주어진 날짜에서 가까운 요일의 날짜
|
SELECT NEXT_DAY(SYSDATE, '금요일')
FROM dual;
|
LAST_DAY
|
주어진 날짜가 속한 달의 마지막 날짜
|
SELECT LAST_DAY(SYSDATE) FROM dual;
|
형 변환 함수
함수
|
설명
|
예시
|
TO_CAHR
|
날짜형/숫자형 -> 문자형
|
SELECT TO_CHAR(SYSDATE, 'MM/DD')
FROM dual;
|
TO_DATE
|
문자형 -> 날짜형
|
SELECT SYSDATE - TO_DATE('2006/01/01', 'YYYY/MM/DD')
FROM dual;
|
TO_NUMBER
|
문자형 -> 숫자형
|
SELECT TO_NUMBER('3') FROM dual;
|
* TO_CHAR 에서 사용하는 형식
형식
|
설명
|
예시
|
9
|
일반적인 숫자 표현
|
SELECT TO_CHAR(1234,'9999') FROM dual;
-> 결과: 123
|
0
|
앞의 빈자리를 0으로 채움
|
SELECT TO_CHAR(1234,'09999') FROM dual;
-> 결과: 01234
|
$
|
$ 표시
|
SELECT TO_CHAR(1234,'$9999') FROM dual;
-> 결과: $1234
|
L
|
지역 통화 표시
|
SELECT TO_CHAR(1234,'L9999') FROM dual;
-> 결과: \1234
|
.
|
소수점 표시
|
SELECT TO_CHAR(1234,'9999.9') FROM dual;
-> 결과: 1234.0
|
,
|
천단위 구분
|
SELECT TO_CHAR(1234,'9,999') FROM dual;
-> 결과: 1,234
|
기타함수
형식
|
설명
|
예시
|
NVL(a,원하는 값)
|
a가 NULL이면 '원하는 값'으로 변환
|
* 급여와 보너스를 합한 연봉을 조회
SELECT ename, sal*12 + NVL(bonus,0) "연봉"
FROM emp_table;
--> NULL값은 연산을 할 수가 없으니 0으로 변환
|
NVL2(a,b,c)
|
a가 NULL이 아니면 b로, NULL이면 c로
|
* 지급급여 조회(보너스가 있으면 보너스를 더한 값)
SELECT ename, NVL2(bonus, bonus+sal, sal)
FROM emp_table;
|
NULLIF(a,b)
|
a와 b의 값이 같다면 NULL, 아니면 a 반환
|
SELECT NULLIF(1,1), NULLIF(1,2) FROM dual;
-> 결과: NULL , 1
|
DECODE(a,b,c)
|
a가 b와 같다면 c반환
|
* 부서번호가 10이면 '인사팀', 20이면 '회계팀'
SELECT deptno,
DECODE(deptno, 10, '인사팀', 20, '회계팀') 부서
FROM emp_table;
|
그룹함수
단일행 함수는 행마다 결과를 출력하나, 그룹함수는 행들을 그룹화하여 하나의 결과를 출력한다.
형식
|
설명
|
예시
|
COUNT
|
행 개수를 출력
컬럼 이름을 명시하면 NULL값을 제외하고 출력하고,
*을 사용하면 NULL값도 포함하여 출력한다.
|
SELECT COUNT(*) FROM emp_table;
-> 결과: 14
SELECT COUNT(bonus) FROM emp_table;
-> 결과: 8
|
SUM
|
NULL값을 제외한 모든 행의 합 출력
|
SELECT SUM(bonus) FROM emp_table;
|
AVG
|
NULL값을 제외한 모든 행의 평균 출력
|
SELECT AVG(bonus) FROM emp_table;
|
MAX
|
NULL값을 제외한 모든 행의 최댓값 출력
|
SELECT MAX(bonus) FROM emp_table;
|
MIN
|
NULL값을 제외한 모든 행의 최솟값 출력
|
SELECT MIN(bonus) FROM emp_table;
|
* 그룹함수는 일반컬럼과 함께 쓸 수 없다.
SELECT ename, SUM(sal) FROM emp_table;
-- 오류: ORA-00937: not a single-group group function
CASE문
일반 함수 DECODE와 비슷한 조건문 함수
-- 형식
SELECT 컬럼이름1, 컬럼이름2, * 쉼표 조심
CASE WHEN 컬럼이름 THEN 결과1
WHEN 컬럼이름 THEN 결과2
WHEN 컬럼이름 THEN 결과3 * 컬럼 이름이 모두 같아야 한다
ELSE when절의 모든 조건이 거짓인 경우의 결과
END [AS 결과를 저장할 가상의 컬럼이름(화면출력이름)]
-- 예제: 직무가 'MANAGER'인 사람들 중 sal이 2000 이상이면 3등급,
-- 2700 이상이면 2등급, 2900이상이면 1등급으로 하여 조회
SELECT ename, deptno, sal,
CASE WHEN sal >= 2900 THEN '1등급'
WHEN sal >= 2700 THEN '2등급'
WHEN sal >= 2000 THEN '3등급'
ELSE 'Unknown'
END AS 등급
FROM emp_table
WHERE lower(job) = 'manager';
'Database' 카테고리의 다른 글
7. JOIN (0) | 2023.05.04 |
---|---|
6. DML/TRANSACTION (0) | 2023.05.04 |
4. SQL언어의 종류 / SELECT / WHERE / 연산자 (0) | 2023.05.04 |
3. 인덱스 (0) | 2023.05.04 |
2. 테이블 생성,변경,삭제 / 자료형 / 제약조건 (0) | 2023.05.04 |