문자관련 함수

● UPPER, LOWER, INITCAP(문자열) : 문자를 대,소문자로 변환

● LENGTH(문자열) : 문자길이 출력
LENGTHB(문자열) : 문자바이트수 출력

● CONCAT(문자열1, 문자열2) : 문자열 조합 (|| 연산자와 같음)

● SUBSTR(문자열, 시작위치, 길이)
- 시작위치가 음수일 때 진행방향은 바뀌지 않고 오른쪽
ex) SUBSTR(JOB, 2, 3) : 2번째 글자부터, 3글자 출력 -> 2, 3, 4번째 글자 출력 (오라클은 1부터 시작)
SUBSTR(JOB, -3, 3) : 뒤에서부터 3번째 글자부터, 3글자 출력 -> -3, -2, -1번째 글자 출력 (마지막 글자위치 : -1)

● INSTR(문자열, 찾는문자, 시작위치[선택, d:1], 시작위치로부터 찾는 문자가 몇번째인지[선택, d:1])
- 시작위치가 음수일 때 진행방향은 바뀌어 왼쪽
ex) INSTR(‘A*B*C*’, ‘*’, 2, 3) : 2번째 글자부터 시작해 3번째 * 자리수출력 = 6
INSTR(‘A*B*C*’, ‘*’,-3, 2) : 뒤에서부터 3번째 글자부터 시작해 2번째 * 자리수출력 = 2

● REPLACE(문자열, 대체될문자, 대체할문자[선택, d:공백]) 

● LPAD(문자열, 자릿수, 빈공간 채울문자[선택, d:공백])
RPAD(문자열, 자릿수, 빈공간 채울문자[선택, d:공백])

● LTRIM(문자열, 삭제할문자[선택])
RTRIM(문자열, 삭제할문자[선택]) 

숫자관련 함수

● ROUND(숫자, 반올림위치[선택, d:0]) : 반올림
● TRUNC(숫자, 버림위치[선택, d:0]) : 버림

ex) 1234.5678

-2 -1 0 1 2
자연수 2자리 자연수 1자리 소수점 1자리 소수점 2자리 소수점 3자리
1200 1230 1235 1234.6 1234.57

● CEIL : 수직선상에서 큰 정수
● FLOOR : 수직선상에서 작은 변수

● MOD : 나머지

● POWER(2, 4) : 2^4

날짜관련 함수

● SYSDATE : 현재 시간 표시

ALTER SESSION SET NLS_DATE_FORMAT = ‘YYYY-MM-DD’; -> 날짜 포맷 바꾸기

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD:HH24:MI:SS';
  • 날짜 + 1 ☞ +1일, 날짜 - 1 ☞ -1일
  • ADD_MONTHS(날짜, 1) ☞ +1달
  • 날짜 - 날짜 ☞ 일수 차이
  • 날짜 + 날짜 ☞ X(불가능)
  • MONTHS_BETWEEN(날짜, 날짜) ☞ 달수 차이

● NEXT_DAY(날짜, 요일) : 다가오는 요일날짜 출력
● LAST_DAY(날짜) : 날짜의 마지막날 출력

● ROUND(날짜, 년/월/일)  ● TRUNC(날짜, 년/월/일)

캐스팅

숫자 ↔ 문자 ↔ 날짜 (문자를 기준으로 캐스팅됨)

● TO_CHAR(날짜 or 숫자, 날짜 or 숫자포맷) : 날짜 or 숫자 -> 문자

-- 날짜 -> 문자  TO_CHAR(날짜, 날짜포맷)
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD:HH24:MI:SS')
FROM dual;
-- 숫자 -> 문자  TO_CHAR(숫자, 숫자포맷)
SELECT TO_CHAR(pay*12, '9,999')
FROM professor

● TO_NUMBER(문자, 숫자포맷) : 문자-> 숫자

SELECT TO_NUMBER('23,444', '99,999')
FROM dual;

● TO_DATE(문자, 날짜포맷) : 문자 -> 날짜

SELECT TO_DATE('2012/01/01', 'YYYY-MM-DD')
FROM dual;

NULL 관련 함수

● NVL(컬럼, 치환값) : 컬럼값이 NULL이 아니면 본래값, NULL이면 치환값을 대신 출력 (본래값 타입 = 치환값 타입)

● NVL2(컬럼, 치환값1, 치환값2) : 컬럼값이 NULL이 아니면 치환값1, NULL이면 치환값2를 대신 출력

   (치환값1 타입 = 치환값2 타입)

NVL(sal, 0)  -- sal이 있으면 sal값 없으면 0 출력
NVL2(sal, 'O', 'X') -- sal이 있으면 'O' 없으면 'X' 출력

◎ case에 따른 함수

● CASE 칼럼 WHEN A THEN B WHEN A2 THEN B2 ELSE C END

SELECT name, deptno, 
    CASE deptno 
         WHEN 101 THEN '컴공'
         WHEN 102 THEN '경영'
         ELSE 0
    END AS 별명
FROM professor;
SELECT name, deptno, 
    CASE  
         WHEN deptno = 101 THEN '컴공'
         WHEN deptno = 102 THEN '경영'
         ELSE 0
    END AS 별명
FROM professor;

● DECODE(컬럼, A, B, A2, B2, …, C[선택, d:NULL]) : 컬럼값이 A이면 B출력 A2이면 B출력, 모두 아니면(else) C출력

SELECT name, deptno, 
    DECODE(deptno, 
            101, '컴공', 
            102, '경영', 
            0) AS 별명
FROM professor;