UPPER : 전부 대문자
LOWER : 전부 소문자
INITCAP : 첫 번째 철자만 대문자
SELECT UPPER(ENAME), LOWER(ENAME), INITCAP(ENAME) FROM EMP;
문자에서 특정 철자 추출
- SUBSTR('단어', 시작 첨자, 시작 위치로부터 끝 첨자'
SELECT SUBSTR('SMITH', 1, 3) FROM DUAL;
문자열의 길이 출력
SELECT ENAME, LENGTH(ENAME) FROM EMP;
문자에서 특정 철자의 위치 출력
- INSTR('단어', '출력할 철자')
SELECT INSTR('SMITH', 'M') FROM DUAL;
특정 철자를 다른 철자로 변경
SELECT ENAME, REPLACE(SAL, 0, '*') FROM EMP;
SELECT ENAME, REGEXP_REPLACE(SAL, '[0~3]', '*') AS SALARY FROM EMP;
특정 철자를 N개 만큼 채우기
LPAD : 왼쪽부터
RPAD : 오른쪽부터
SELECT ENAME, LPAD(SAL, 10, '*') AS LPAD_SAL, RPAD(SAL, 10, '*') AS RPAD_SAL FROM EMP;
특정 철자 잘라내기
TRIM : 원하는 철자
LTRIM : 왼쪽 철자
RTRIM : 오른쪽 철자
SELECT 'SMITH', LTRIM('SMITH', 'S'), RTRIM('SMITH', 'H'), TRIM('S' FROM 'SMITHS') FROM DUAL;
ROUND : 반올림
TRUNC : 특정 자리의 숫자를 버리고 출력
SELECT '876.567' AS 숫자, ROUND(876.567,1) FROM DUAL;
SELECT '876.567' AS 숫자, TRUNC(876.567,1) FROM DUAL;
MOD: 나눈 나머지 값 출력
FLOOR : 몫
SELECT MOD(10, 3) FROM DUAL;
SELECT EMPNO, MOD(EMPNO, 2) FROM EMP;
SELECT FLOOR(10/3) FROM DUAL;
날짜 간 개월 수 출력
SELECT ENAME, MONTHS_BETWEEN(SYSDATE, HIREDATE) FROM EMP;
SELECT TO_DATE('2019/06/01', 'RRRR-MM-DD') - TO_DATE('2018-10-01', 'RRRR-MM-DD') FROM DUAL;
개월 수 더한 날짜 출력
SELECT ADD_MONTHS(TO_DATE('2019-05-01', 'RRRR-MM-DD'),100) FROM DUAL;
SELECT TO_DATE('2019-05-01', 'RRRR-MM-DD') + 100 FROM DUAL;
특정 날짜 뒤에 오는 요일 날짜 출력
SELECT SYSDATE AS 오늘날짜, NEXT_DAY(SYSDATE, '월요일') FROM DUAL;
특정 날짜가 있는 달의 마지막 날짜 출력
SELECT '2019/05/22' AS 날짜, LAST_DAY('2019/05/22') AS "마지막 날짜" FROM DUAL;
SELECT LAST_DAY(SYSDATE) - SYSDATE AS "남은 날짜" FROM DUAL;
2023-05-10 현재 기준 이번달 말일까지 총 며칠 남았는지 출력하는 쿼리
NVL(전달값,변경값) : 전달값이 NULL인 경우 변경값으로 변환하여 반환하는 함수
NVL2(전달값,변경값1,변경값2) : 전달값이 NULL이 아닌 경우 변경값1로 변환하여 반환하고 NULL인 경우 변경값2으로 변환하여 반환하는 함수
SELECT ENAME, COMM, NVL(COMM,0) FROM EMP;
SELECT ENAME, SAL, COMM, NVL2(COMM, SAL+COMM, SAL) FROM EMP WHERE JOB IN ('SALESMAN', 'ANALYST');
전달값을 비교값과 차례대로 비교하여 같은 경우 변경값으로 변환하여 반환하는 함수
비교값이 모두 다른 경우 기본값으로 변환하여 반환
기본값이 생략된 경우 NULL 반환
SELECT ENAME, DEPTNO, DECODE(DEPTNO, 10, 300, 20, 400, 0) AS 보너스 FROM EMP;
DECODE와 비슷한 SQL의 IF문
SELECT ENAME, JOB, SAL, CASE WHEN SAL >= 3000 THEN 500
WHEN SAL >= 2000 THEN 300
WHEN SAL >= 3000 THEN 500
ELSE 0 END AS BONUS
FROM EMP;