๐โโ๏ธ ํจ์(Function)๋,
ํ๋์ ํฐ ํ๋ก๊ทธ๋จ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ๋ค์ ๋ถ๋ฆฌํ์ฌ ์์ฑํด ๋์
์์ ์๋ธ ํ๋ก๊ทธ๋จ
- ์ปฌ๋ผ ๊ฐ์ ์ฝ์ด์ ๊ณ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด
๐โโ๏ธ ๊ทธ๋ฃน(GROUP)ํจ์ & ๋จ์ผํ(SINGLE ROW)ํจ์๋,
- ๊ทธ๋ฃน(GROUP)ํจ์ : ์ปฌ๋ผ์ ๊ธฐ๋ก๋ N๊ฐ์ ๊ฐ์ ์ฝ์ด์ ํ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด
- ๋จ์ผํ(SINGLE ROW)ํจ์ : ์ปฌ๋ผ์ ๊ธฐ๋ก๋ N๊ฐ์ ๊ฐ์ ์ฝ์ด์ N๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด
- ๋ ํจ์๊ฐ ๋ฆฌํดํ๋ ํ์ ๊ฐฏ์๊ฐ ๋ค๋ฅด๋ฏ๋ก SELECT์ ์ ๋จ์ผํ ํจ์์ ๊ทธ๋ฃน ํจ์๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์์
๐ ๊ทธ๋ฃน ํจ์์ ์ข ๋ฅ
1) SUM
2) AVG
3) MAX
4) MIN
5) COUNT
SUM(์ซ์๊ฐ ๊ธฐ๋ก๋ ์ปฌ๋ผ๋ช
)
: ํฉ๊ณ๋ฅผ ๊ตฌํ์ฌ ๋ฆฌํด
SELECT
SUM(SALARY)
FROM EMPLOYEE;
AVG(์ซ์๊ฐ ๊ธฐ๋ก๋ ์ปฌ๋ผ๋ช
)
: ํ๊ท ์ ๊ตฌํ์ฌ ๋ฆฌํด
SELECT
AVG(SALARY)
FROM EMPLOYEE;
MAX(์ปฌ๋ผ๋ช
)
: ์ปฌ๋ผ์์ ๊ฐ์ฅ ํฐ ๊ฐ ๋ฆฌํด. ์ทจ๊ธํ๋ ์๋ฃํ์ ANY TYPE.
SELECT
MAX(EMAIL)
, MAX(HIRE_DATE)
, MAX(SALARY)
FROM EMPLOYEE;
MIN(์ปฌ๋ผ๋ช
)
: ์ปฌ๋ผ์์ ๊ฐ์ฅ ์์ ๊ฐ ๋ฆฌํด. ์ทจ๊ธํ๋ ์๋ฃํ์ ANY TYPE.
SELECT
MIN(EMAIL)
, MIN(HIRE_DATE)
, MIN(SALARY)
FROM EMPLOYEE;
COUNT(* or ์ปฌ๋ผ๋ช
)
: ํ์ ๊ฐฏ์๋ฅผ ํค์๋ ค์ ๋ฆฌํด
COUNT(*)
: NULL์ ํฌํจํ ์ ์ฒด ํ ๊ฐฏ์ ๋ฆฌํด
COOUNT(์ปฌ๋ผ๋ช
)
: NULL์ ์ ์ธํ ์ค์ ๊ฐ์ด ๊ธฐ๋ก๋ ํ ๊ฐฏ์ ๋ฆฌํด
COUNT(DISTINCT ์ปฌ๋ผ๋ช
)
: ์ค๋ณต์ ์ ๊ฑฐํ ํ ๊ฐฏ์ ๋ฆฌํด
SELECT
COUNT(*)
, COUNT(DEPT_CODE) >>> NULL ์ ์ธํ ๊ฐ์ ํ ๊ฐฏ์
, COUNT(DISTINCT DEPT_CODE) >>> ์ค๋ณต์ ์ ๊ฑฐํ ํ ๊ฐฏ์
FROM EMPLOYEE;
๐ ๋ฌธ์ ๊ด๋ จ ํจ์์ ์ข ๋ฅ
1) LENGTH / LENGTHB
2) INSTR
3) LPAD / RPAD
4) LTRIM / RTRIM
5) TRIM
6) SUBSTR
7) SUBSTRB
8) LOWER / UPPER / INITCAP
9) CONCAT
10) REPLACE
๐โโ๏ธ LENGTH / LENGTHB๋,
์ฃผ์ด์ง ์ปฌ๋ผ ๊ฐ or ๋ฌธ์์ด์ ๊ธธ์ด(byte)๋ฅผ ๋ฐํํ๋ ํจ์
SELECT
LENGTH('์ค๋ผํด')
, LENGTHB('์ค๋ผํด') >>> LENGTHB : byteํฌ๊ธฐ๋ฅผ ํฌํจํ ๊ธธ์ด
>>> ํ๊ธ์ ๊ธ์ ๋น 3byte์ด๋ฏ๋ก 9 ์ถ๋ ฅ
FROM DUAL;
SELECT
LENGTH(EMAIL) >>> ์ด๋ฉ์ผ(์๋ฌธ)์ ๊ธธ์ด์ธ 17์ถ๋ ฅ
, LENGTHB(EMAIL) >>> ์๋ฌธ์ ๊ธ์๋น 1byte
FROM EMPLOYEE;
๐โโ๏ธ INSTR๋,
์ฐพ๋ ๋ฌธ์(์ด)์ด ์ง์ ํ ์์น๋ถํฐ ์ง์ ํ ํ์๋งํผ ๋ํ๋ ์์ ์์น๋ฅผ ๋ฐํํ๋ ํจ์
INSTR('๋ฌธ์์ด'or ์ปฌ๋ผ๋ช
, '๋ฌธ์', ์ฐพ์ ์์น์ ์์๊ฐ, ๋น๋)
SELECT
EMAIL
, INSTR(EMAIL, '@', -1) ์์น
FROM EMPLOYEE;
SELECT INSTR('AABAACAABBAA', 'B') FROM DUAL;
SELECT INSTR('AABAACAABBAA', 'B', 1) FROM DUAL;
SELECT INSTR('AABAACAABBAA', 'B', -1) FROM DUAL;
SELECT INSTR('AABAACAABBAA', 'B', 1, 2) FROM DUAL; >>> 'AABAACAABBAA'์์ ๋ ๋ฒ์งธ B๋ฅผ 1๋ฒ ์๋ฆฌ์์๋ถํฐ ์ฐพ๊ธฐ
SELECT INSTR('AABAACAABBAA', 'B', -1, 2) FROM DUAL; >>> 'AABAACAABBAA'์์ ๋ ๋ฒ์งธ B๋ฅผ -1๋ฒ ์๋ฆฌ์์๋ถํฐ ์ฐพ๊ธฐ (๋งจ ๋ค์์ ๊ฐ๊น์ด ์)
๐โโ๏ธ LPAD / RPAD๋,
์ฃผ์ด์ง ์ปฌ๋ผ ๋ฌธ์์ด์ ์์์ ๋ฌธ์์ด์ ๋ง๋ถ์ฌ ๊ธธ์ด N์ ๋ฌธ์์ด์ ๋ฐํํ๋ ํจ์
SELECT
LPAD(EMAIL, 20, '#') >>> ์ด๋ฉ์ผ์ 20๊ธ์๋ก ์ฑ์ฐ๋๋ฐ, ๋น ๊ณณ์ '#'์ผ๋ก ์ฑ์ฐ๊ธฐ (์ผ์ชฝ)
FROM EMPLOYEE;
SELECT
RPAD(EMAIL, 20, '#') >>> ์ด๋ฉ์ผ์ 20๊ธ์๋ก ์ฑ์ฐ๋๋ฐ, ๋น ๊ณณ์ '#'์ผ๋ก ์ฑ์ฐ๊ธฐ (์ค๋ฅธ์ชฝ)
FROM EMPLOYEE;
SELECT
LPAD(EMAIL, 10) >>> ์ด๋ฉ์ผ์ด 10๊ธ์๊น์ง๋ง ์ถ๋ ฅ๋๊ณ ๋ค๋ ์๋ฆผ
FROM EMPLOYEE;
SELECT
RPAD(EMAIL, 10) >>> ์์ ๊ฐ์
FROM EMPLOYEE;
๐โโ๏ธ LTRIM / RTRIM์ด๋,
์ฃผ์ด์ง ์ปฌ๋ผ์ด๋ ๋ฌธ์์ด ์ผ์ชฝ/์ค๋ฅธ์ชฝ์์ ์ง์ ํ ๋ฌธ์ ํน์ ๋ฌธ์์ด์ ์ ๊ฑฐํ ๋๋จธ์ง๋ฅผ ๋ฐํํ๋ ํจ์
SELECT LTRIM(' GREEDY') FROM DUAL;
SELECT LTRIM(' GREEDY', ' ') FROM DUAL; >>> ๊ณต๋ฐฑ์ ์ผ์ชฝ์์๋ถํฐ ์ ๊ฑฐ
SELECT LTRIM('000123456', '0') FROM DUAL; >>> 0์ ์ผ์ชฝ์์๋ถํฐ ์ ๊ฑฐ
SELECT LTRIM('123123GREEDY', '123') FROM DUAL;
SELECT LTRIM('132123GREEDY123', '123') FROM DUAL; >>> 1 or 2 or 3์ ์ผ์ชฝ์์๋ถํฐ ์ ๊ฑฐ (๋งจ ์ค๋ฅธ์ชฝ 123์ ์ ๊ฑฐ X)
SELECT LTRIM('ACABACGREEDY', 'ABC') FROM DUAL; >>> A or B or C๋ฅผ ์ผ์ชฝ์์๋ถํฐ ์ ๊ฑฐ
SELECT LTRIM('5782GREEDY', '0123456789') FROM DUAL; >>> ์ผ์ชฝ์ ์๋ ์ซ์๋ฅผ ๋ชจ๋ ์ ๊ฑฐ
SELECT RTRIM('GREEDY ') FROM DUAL;
SELECT RTRIM('GREEDY ', ' ') FROM DUAL;
SELECT RTRIM('123456000', '0') FROM DUAL;
SELECT RTRIM('GREEDY123123', '123') FROM DUAL;
SELECT RTRIM('123123GREEDY123', '123') FROM DUAL; >>> 1 or 2 or 3์ ์ค๋ฅธ์ชฝ์์๋ถํฐ ์ ๊ฑฐ (๋งจ ์ผ์ชฝ 123123์ ์ ๊ฑฐ X)
SELECT RTRIM('GREEDYACABAC', 'ABC') FROM DUAL;
SELECT RTRIM('GREEDY5782', '0123456789') FROM DUAL;
๐โโ๏ธ TRIM์ด๋,
์ฃผ์ด์ง ์ปฌ๋ผ์ด๋ ๋ฌธ์์ด์ ์/๋ค์ ์ง์ ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐ
SELECT TRIM(' GREEDY ') FROM DUAL;
SELECT TRIM('Z' FROM 'ZZZGREEDYZZZ') FROM DUAL; >>> 'ZZZGREEDYZZZ'์ผ๋ก๋ถํฐ Z๋ชจ๋ ์ ๊ฑฐ
SELECT TRIM(LEADING 'Z' FROM 'ZZZGREEDYZZZ') FROM DUAL; >>> ์ผ์ชฝ์ Z๋ง ์ ๊ฑฐ
SELECT TRIM(TRAILING 'Z' FROM 'ZZZGREEDYZZZ') FROM DUAL; >>> ์ค๋ฅธ์ชฝ์ Z๋ง ์ ๊ฑฐ
SELECT TRIM(BOTH 'Z' FROM 'ZZZGREEDYZZZ') FROM DUAL; >>> ์์ชฝ์ Z๋ง ์ ๊ฑฐ
๐โโ๏ธ SUBSTR์ด๋,
์ปฌ๋ผ์ด๋ ๋ฌธ์์ด์์ ์ง์ ํ ์์น๋ก๋ถํฐ ์ง์ ํ ๊ฐฏ์์ ๋ฌธ์์ด์ ์๋ผ์ ๋ฆฌํดํ๋ ํจ์
SELECT SUBSTR('SHOWMETHEMONEY', 5, 2) FROM DUAL; >>> ๋ค์ฏ๋ฒ์งธ ์๋ฆฌ๋ถํฐ 2๊ธ์ ์ถ๋ ฅ
SELECT SUBSTR('SHOWMETHEMONEY', 7) FROM DUAL; >>> ์ผ๊ณฑ๋ฒ์งธ ์๋ฆฌ๋ถํฐ ๋๊น์ง
SELECT SUBSTR('SHOWMETHEMONEY', -8, 3) FROM DUAL; >>> ๋ค์์ ์ฌ๋๋ฒ์งธ ์๋ฆฌ๋ถํฐ 3๊ธ์ ์ถ๋ ฅ
SELECT SUBSTR('์ผ์ฐ ๋ฏธ ๋ ๋จธ๋', 2, 5) FROM DUAL; >>> ํ๊ธ๋ ์๋ฌธ์ฒ๋ผ ํ ๊ธ์์ฉ ์ทจ๊ธ๋์ด '์ฐ ๋ฏธ ๋'์ถ๋ ฅ
SELECT
EMP_NAME ์ฌ์๋ช
, SUBSTR(EMP_NO, 1, 2) ์๋
, SUBSTR(EMP_NO, 3, 2) ์์
, SUBSTR(EMP_NO, 5, 2) ์์ผ
FROM EMPLOYEE;
SELECT
HIRE_DATE
, SUBSTR(HIRE_DATE, 1, 2) ์
์ฌ๋
๋
, SUBSTR(HIRE_DATE, 4, 2) ์
์ฌ์
, SUBSTR(HIRE_DATE, 7, 2) ์
์ฌ์ผ
FROM EMPLOYEE;
SELECT
*
FROM EMPLOYEE
WHERE SUBSTR(EMP_NO, 8, 1) = '2';
SELECT
*
FROM EMPLOYEE
WHERE AVG(SALARY) > 100;
>>> '๊ทธ๋ฃน ํจ์๋ ํ๊ฐ๋์ง ์์ต๋๋ค' ์ค๋ฅ (์กฐ๊ฑด์ ํน์ ํ ์ ์์ผ๋ฏ๋ก)
SELECT
EMP_NAME
, RPAD(SUBSTR(EMP_NO, 1, 7), 14, '*')
>>> 1 ~ 7 ์๋ฆฌ๊น์ง๋ง ์๋ผ๋ด๊ณ ์ ์ฒด๋ฅผ 14์๋ฆฌ๋ก ๊ณ ์ ํ๋ฉฐ ๋จ์ ์๋ฆฌ๋ *๋ก ์ฑ์ฐ๊ธฐ
FROM EMPLOYEE;
SELECT
EMP_NAME
, EMAIL
, SUBSTR(EMAIL, 1, INSTR(EMAIL, '@')-1) ์์ด๋ -- -1 : @์ ์๊น์ง
FROM EMPLOYEE;
๐โโ๏ธ SUBSTRB๋,
๋ฌธ์์ด์ ์๋ผ์ ๋ฐ์ดํธ ๋จ์๋ก ๋ฆฌํดํ๋ ํจ์
SELECT
SUBSTR('ORACLE', 3, 2)
, SUBSTRB('ORACLE', 3, 2) >>> ์์ ์ฐจ์ด๊ฐ ์์(์๋ฌธ์ 1byte)
FROM DUAL;
SELECT
SUBSTR('์ค๋ผํด', 2, 2)
, SUBSTRB('์ค๋ผํด', 4, 6) >>> 4๋ฒ์งธ ์๋ฆฌ์ธ '๋ผ'๋ถํฐ 6byte ์ถ๋ ฅ
>>> '๋ผํด' ์ถ๋ ฅ
FROM DUAL;
๐โโ๏ธ LOWER / UPPER / INITCAP์ด๋,
์ปฌ๋ผ์ ๋ฌธ์ ํน์ ๋ฌธ์์ด์ ์๋ฌธ์/๋๋ฌธ์/์ฒซ ๊ธ์๋ง ๋๋ฌธ์๋ก ๋ณํํ์ฌ ๋ฆฌํดํ๋ ํจ์
LOWER(๋ฌธ์์ด or ์ปฌ๋ผ)
: ์๋ฌธ์๋ก ๋ณ๊ฒฝํด์ฃผ๋ ํจ์
SELECT
LOWER('Welcome To My World')
FROM DUAL;
UPPER(๋ฌธ์์ด or ์ปฌ๋ผ)
: ๋๋ฌธ์๋ก ๋ณ๊ฒฝํด์ฃผ๋ ํจ์
SELECT
UPPER('Welcome To My World')
FROM DUAL;
INITCAP(๋ฌธ์์ด or ์ปฌ๋ผ)
: ์ ๊ธ์๋ง ๋๋ฌธ์๋ก ๋ณ๊ฒฝํด์ฃผ๋ ํจ์
SELECT
INITCAP('welcome to my world')
FROM DUAL;
๐โโ๏ธ CONCAT์ด๋,
๋ฌธ์์ด ํน์ ์ปฌ๋ผ ๋ ๊ฐ๋ฅผ ์ ๋ ฅ ๋ฐ์ ํ๋๋ก ํฉ์น ๋ค, ๋ฆฌํดํ๋ ํจ์
SELECT
CONCAT('๊ฐ๋๋ค๋ผ', 'ABCD')
FROM DUAL;
SELECT
'๊ฐ๋๋ค๋ผ' || 'ABCD' >>> ์์ ๋์ผ (๋ณํฉ)
FROM DUAL;
๐โโ๏ธ REPLACE๋,
์ปฌ๋ผ ํน์ ๋ฌธ์์ด์ ์ ๋ ฅ ๋ฐ์ ๋ณ๊ฒฝํ๊ณ ์ ํ๋ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ ๋ฌธ์์ด๋ก ๋ฐ๊พผ ๋ค, ๋ฆฌํด
SELECT
REPLACE('์์ธ์ ๊ฐ๋จ๊ตฌ ์ญ์ผ๋', '์ญ์ผ๋', '์ผ์ฑ๋')
>>> ๋ฌธ์์ด ์์ ์ญ์ผ๋์ ์ผ์ฑ๋์ผ๋ก ๋ณ๊ฒฝ
FROM DUAL;
๐ ์ซ์ ์ฒ๋ฆฌ ํจ์์ ์ข ๋ฅ
1) ABS
2) MOD
3) ROUND
4) FLOOR
5) TRUNC
6) CEIL
ABS(์ซ์ or ์ซ์๋ก ๋ ์ปฌ๋ผ๋ช
)
: ์ ๋๊ฐ ๊ตฌํ๋ ํจ์
SELECT
ABS(-10)
, ABS(10)
FROM DUAL;
MOD(์ซ์ or ์ซ์๋ก ๋ ์ปฌ๋ผ๋ช
, ์ซ์ or ์ซ์๋ก ๋ ์ปฌ๋ผ๋ช
)
: ๋ ์๋ฅผ ๋๋์ด์ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ํจ์ (์ฒ์ ์ธ์๋ ๋๋์ด์ง๋ ์, ๋ ๋ฒ์งธ ์ธ์๋ ๋๋ ์)
SELECT
MOD(10, 5)
, MOD(10, 3) >>> 10์ 3์ผ๋ก ๋๋ ๋๋จธ์ง ์ถ๋ ฅ
FROM DUAL;
ROUND(์ซ์ or ์ซ์๋ก ๋ ์ปฌ๋ผ๋ช
, ์์น)
: ๋ฐ์ฌ๋ฆผํด์ ๋ฆฌํดํ๋ ํจ์
SELECT ROUND(123.456) FROM DUAL;
SELECT ROUND(123.456, 0) FROM DUAL;
SELECT ROUND(123.456, 1) FROM DUAL; >>> ์์์ ์ฒซ๋ฒ์งธ์๋ฆฌ๊น์ง ๋ฐ์ฌ๋ฆผํ์ฌ ์ถ๋ ฅ
SELECT ROUND(123.456, 2) FROM DUAL;
SELECT ROUND(123.456, -2) FROM DUAL; >>> 10์ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ์ฌ ์ถ๋ ฅ
>>> 100์ถ๋ ฅ
FLOOR(์ซ์ or ์ซ์๋ก ๋ ์ปฌ๋ผ๋ช
)
: ๋ด๋ฆผ์ฒ๋ฆฌ ํจ์
SELECT FLOOR(123.456) FROM DUAL;
SELECT FLOOR(123.678) FROM DUAL; >>> ๋ฌด์กฐ๊ฑด ๋ด๋ฆผ
TRUNC(์ซ์ or ์ซ์๋ก ๋ ์ปฌ๋ผ๋ช
, ์์น)
: ๋ด๋ฆผ์ฒ๋ฆฌ ํจ์ (์์น์ง์ ๊ฐ๋ฅ)
SELECT TRUNC(123.456) FROM DUAL;
SELECT TRUNC(123.678) FROM DUAL;
SELECT TRUNC(123.456, 1) FROM DUAL;
SELECT TRUNC(123.456, 2) FROM DUAL; >>> ๋ฐ์ฌ๋ฆผ์ด ์๋ ์์์ ๋๋ฒ์งธ์๋ฆฌ๊น์ง๋ง ๋จ๊ธฐ๊ณ ์๋ฆ
SELECT TRUNC(123.456, -1) FROM DUAL; >>> 1์ ์๋ฆฌ์์ ๋ด๋ฆผํ์ฌ ์ถ๋ ฅ
>>> 120 ์ถ๋ ฅ
CEIL(์ซ์ or ์ซ์๋ก ๋ ์ปฌ๋ผ๋ช
)
: ์ฌ๋ฆผ์ฒ๋ฆฌ ํจ์
SELECT CEIL(123.456) FROM DUAL; >>> ๋ฌด์กฐ๊ฑด ์ฌ๋ฆผ
SELECT CEIL(123.678) FROM DUAL;
๐ ๋ ์ง ์ฒ๋ฆฌ ํจ์์ ์ข ๋ฅ
1) SYSDATE
2) MONTHS_BETWEEN
3) ADD_MONTHS
4) NEXT_DAY
5) LAST_DAY
6) EXTRACT
๐โโ๏ธ SYSDATE๋,
์์คํ ์ ์ ์ฅ๋์ด ์๋ ๋ ์ง๋ฅผ ๋ฐํํ๋ ํจ์
SELECT SYSDATE FROM DUAL; >>> ๋ ์ง ๋ฟ๋ง ์๋๋ผ ์๊ฐ๋ ์ถ๋ ฅ๋จ
MONTHS_BETWEEN(๋ ์ง, ๋ ์ง)
: ๋ ๋ ์ง์ ๊ฐ์ ์ ์ฐจ์ด๋ฅผ ์ซ์๋ก ๋ฆฌํด
SELECT
EMP_NAME
, HIRE_DATE
, CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) >>> ์ง๊ธ ํ์ฌ์ ๊ณ ์ฉ๋ ์ง์ ๊ฐ์ ์ ์ฐจ์ด ์ถ๋ ฅ
FROM EMPLOYEE;
ADD_MONTHS(๋ ์ง, ์ซ์)
: ๋ ์ง์ ์ซ์๋งํผ ๊ฐ์ ์ ๋ํด์ ๋ ์ง๋ก ๋ฆฌํด
SELECT
ADD_MONTHS(SYSDATE, 5) >>> ํ์ฌ ๋ ์ง์ 5๊ฐ์ ๋ํ ๊ฐ ์ถ๋ ฅ
FROM DUAL;
SELECT
*
FROM EMPLOYEE
--WHERE MONTHS_BETWEEN(SYSDATE, HIRE_DATE) >= 240;
WHERE ADD_MONTHS(HIRE_DATE, 240) <= SYSDATE; >>> ์ ์๊ณผ ๋์ผํ ๊ฒฐ๊ณผ
NEXT_DAY(๊ธฐ์ค๋ ์ง, ์์ผ(๋ฌธ์ or ์ซ์))
: ๊ธฐ์ค ๋ ์ง์์ ๊ตฌํ๋ ค๋ ์์ผ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ์ง ๋ฆฌํด
SELECT SYSDATE, NEXT_DAY(SYSDATE, '๊ธ์์ผ') FROM DUAL;
SELECT SYSDATE, NEXT_DAY(SYSDATE, '๊ธ') FROM DUAL;
SELECT SYSDATE, NEXT_DAY(SYSDATE, 6) FROM DUAL; >>> ์ซ์๋ 1~7์ด๋ฉฐ ์ผ์์ผ๋ถํฐ ์์
SELECT SYSDATE, NEXT_DAY(SYSDATE, 'FRIDAY') FROM DUAL; >>> ํ์ฌ ์์คํ
์ค์ ์ด ํ๊ธ์ด๊ธฐ ๋๋ฌธ์ ์๋ฌธ์ X
-- ์์คํ
ํ๊ฒฝ์ ๋ฐ๋ผ ์ธ์ด๊ฐ ์ค์ ๋์ด์์ผ๋ฏ๋ก ๋ณ๊ฒฝ์ ์ํ๋ฉด ์ค์ ์ ๋ณ๊ฒฝํด์ ์ฌ์ฉ
ALTER SESSION SET NLS_LANGUAGE = AMERICAN; >>> ์์คํ
์ค์ ์ ์๋ฌธ์ผ๋ก ๋ฐ๊ฟ
SELECT SYSDATE, NEXT_DAY(SYSDATE, 'FRIDAY') FROM DUAL;
SELECT SYSDATE, NEXT_DAY(SYSDATE, '๊ธ์์ผ') FROM DUAL; >>> ํ์ฌ ์์คํ
์ค์ ์ด ์๋ฌธ์ด๊ธฐ ๋๋ฌธ์ ํ๊ธ์ X
ALTER SESSION SET NLS_LANGUAGE = KOREAN; >>> ์์คํ
์ค์ ์ ๋ค์ ํ๊ธ๋ก ๋ฐ๊ฟ
LAST_DAY(๋ ์ง)
: ํด๋น ์์ ๋ง์ง๋ง ๋ ์ง๋ฅผ ๊ตฌํ์ฌ ๋ฆฌํด
SELECT SYSDATE, LAST_DAY(SYSDATE) FROM DUAL;
SELECT
EMP_NAME
, HIRE_DATE
, LAST_DAY(HIRE_DATE) - HIRE_DATE + 1 "์
์ฌ์์ ๊ทผ๋ฌด์ผ์"
>>> + 1 : ์ผํ ์ฒซ๋ ์ ํฌํจํ์ฌ ์ธ๊ธฐ ์ํจ
FROM EMPLOYEE;
EXTRACT
: ๋
, ์, ์ผ ์ ๋ณด๋ฅผ ์ถ์ถํ์ฌ ๋ฆฌํดํ๋ ํจ์
EXTRACT(YEAR FROM ๋ ์ง)
: ๋
๋๋ง ์ถ์ถ
EXTRACT(MONTH FROM ๋ ์ง)
: ์๋ง ์ถ์ถ
EXTRACT(DAY FROM ๋ ์ง)
: ์ผ๋ง ์ถ์ถ
SELECT
EXTRACT(YEAR FROM SYSDATE) ๋
๋
, EXTRACT(MONTH FROM SYSDATE) ์
, EXTRACT(DAY FROM SYSDATE) ์ผ
FROM DUAL;
SELECT
EMP_NAME
, HIRE_DATE
, EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE)
FROM EMPLOYEE;
SELECT
EMP_NAME
, HIRE_DATE
-- , MONTHS_BETWEEN(SYSDATE, HIRE_DATE) "๋ง ๊ทผ๋ฌด๋
์" >>> ๊ฐ์ ์์ ์ฐจ์ด ๋ฐํ
, FLOOR(MONTHS_BETWEEN(SYSDATE, HIRE_DATE) / 12) "๋ง ๊ทผ๋ฌด๋
์"
>>> ๊ฐ์ ์์ ์ฐจ๋ฅผ 12๋ก ๋๋์ด ๋
์ผ๋ก ๋ง๋ค๊ณ ๋ด๋ฆผ์ฒ๋ฆฌ
FROM EMPLOYEE;
๐ ํ๋ณํ ํจ์์ ์ข ๋ฅ
1) TO_CHAR
2) TO_DATE
3) TO_NUMBER
TO_CHAR(๋ ์ง, ํฌ๋งท)
: ๋ ์งํ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ํ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝ
TO_CHAR(์ซ์, ํฌ๋งท)
: ์ซ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ํ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝ
SELECT TO_CHAR(1234) FROM DUAL; >>> 1234๊ฐ ๋ฌธ์์ด๋ก ๋ฐ๋์ด์๋ ์ํ
SELECT TO_CHAR(1234, '99999') FROM DUAL; >>> ๋ค์ฏ์๋ฆฌ์ด๋ ๊ณต๋ฐฑ1234 ์ถ๋ ฅ
SELECT TO_CHAR(1234, '00000') FROM DUAL; >>> ๋ค์ฏ์๋ฆฌ์ด๋ 01234 ์ถ๋ ฅ
SELECT TO_CHAR(1234, 'L99999') FROM DUAL; >>> ์ ํํ ํ๊ธฐ
SELECT TO_CHAR(1234, '$99999') FROM DUAL; >>> ๋ฌ๋ฌ ํํ ํ๊ธฐ
SELECT TO_CHAR(1234, '00,000') FROM DUAL; >>> 01,234 ์ถ๋ ฅ
SELECT TO_CHAR(1234, '999') FROM DUAL; >>> ํ๊ธฐ ๋ถ๊ฐ
SELECT
EMP_NAME
, TO_CHAR(SALARY, 'L9,999,999') >>> ์ด์ฒ๋ผ TO_CHAR๋ ํฌ๋งท ๋ฌธ์์ด์ ์ฌ์ฉํ๊ธฐ ์ํจ
FROM EMPLOYEE;
SELECT TO_CHAR(SYSDATE, 'PM HH24:MI:SS') FROM DUAL; >>> ์คํ 1์ = 13์๋ก ํ๊ธฐ
SELECT TO_CHAR(SYSDATE, 'AM HH:MI:SS') FROM DUAL; >>> ์คํ 1์ = 1์๋ก ํ๊ธฐ
SELECT TO_CHAR(SYSDATE, 'MON DY, YYYY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-fmMM-DD DAY') FROM DUAL; >>> fm : 01์ด ์๋ 1๋ก ํ๊ธฐ
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY') FROM DUAL; >>> fm์ด ์์ด 01๋ก ํ๊ธฐ
SELECT TO_CHAR(SYSDATE, 'YEAR, Q') || '๋ถ๊ธฐ' FROM DUAL; >>> ex) TWENTY TWENTY-THREE, 1๋ถ๊ธฐ
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY-MM-DD') ์
์ฌ์ผ
FROM EMPLOYEE;
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY"๋
" MM"์" DD"์ผ"') ์
์ฌ์ผ
>>> ํ๋ฐ์ดํ ์์ ์๋ฐ์ดํ๋ก ๋ฌธ์ ๋ฃ์ ์ ์์
FROM EMPLOYEE;
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY/MM/DD HH24:MI:SS') ์์ธ์
์ฌ์ผ
FROM EMPLOYEE;
SELECT
TO_CHAR(SYSDATE, 'YYYY')
, TO_CHAR(SYSDATE, 'RRRR')
, TO_CHAR(SYSDATE, 'YY')
, TO_CHAR(SYSDATE, 'RR')
, TO_CHAR(SYSDATE, 'YEAR')
FROM DUAL;
RR์ ๋์๋ฆฌ ๋ ๋๋ฅผ ๋ค์๋ฆฌ๋ก ๋ฐ๊ฟ ๋ ๋ฐ๊ฟ ๋ ๋๊ฐ 50๋ ๋ฏธ๋ง์ด๋ฉด 2000๋ ์ ์ ์ฉํ๊ณ 50๋ ์ด์์ด๋ฉด 1900๋ ์ ์ ์ฉ.
YY๋ ๋ ๋๋ฅผ ๋ฐ๊ฟ ๋ ๋ฌด์กฐ๊ฑด ํ์ฌ ์ธ๊ธฐ(2000๋ )๋ฅผ ์ ์ฉ.
SELECT
TO_CHAR(TO_DATE('980630', 'YYMMDD'), 'YYYY-MM-DD') >>> YY : 2098-06-30 ์ถ๋ ฅ
FROM DUAL;
SELECT
TO_CHAR(TO_DATE('980630', 'RRMMDD'), 'YYYY-MM-DD') >>> RR : 1998-06-30 ์ถ๋ ฅ
FROM DUAL;
SELECT
TO_CHAR(SYSDATE, 'MM')
, TO_CHAR(SYSDATE, 'MONTH')
, TO_CHAR(SYSDATE, 'MON') >>> MONTH์ ๋์ผํ ์ถ๋ ฅ
, TO_CHAR(SYSDATE, 'RM') >>> ๋ก๋ง๋ฌธ์ํ๊ธฐ
FROM DUAL;
SELECT
TO_CHAR(SYSDATE, '"1๋
๊ธฐ์ค " DDD"์ผ ์งธ"') >>> ๋
, TO_CHAR(SYSDATE, '"๋ฌ ๊ธฐ์ค " DD"์ผ ์งธ"') >>> ๋ฌ
, TO_CHAR(SYSDATE, '"์ฃผ ๊ธฐ์ค " D"์ผ ์งธ"') >>> ์ฃผ
FROM DUAL;
SELECT
TO_CHAR(SYSDATE, 'Q"๋ถ๊ธฐ"')
, TO_CHAR(SYSDATE, 'DAY') >>> 'ํ ์์ผ' ์ถ๋ ฅ
, TO_CHAR(SYSDATE, 'DY') >>> 'ํ ' ์ถ๋ ฅ
FROM DUAL;
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY"๋
" fmMM"์" DD"์ผ" "("DY")"')
>>> ์์ 0์ ํ๊ธฐํ์ง์๊ธฐ ์ํด fm ์
๋ ฅ
FROM EMPLOYEE;
TO_DATE(๋ฌธ์, ํฌ๋งท)
: ๋ฌธ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ ์งํ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝ
TO_DATE(์ซ์, ํฌ๋งท)
: ์ซ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ ์งํ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝ
SELECT
TO_DATE('20100101', 'RRRRMMDD') >>> 10/01/01 ์ถ๋ ฅ
FROM DUAL;
SELECT
TO_CHAR(TO_DATE('20100101', 'RRRRMMDD'), 'RRRR, MON') >>> ๋ ์ง ๋ฐ์ดํฐ๋ก ๋ฐ๊พผ ๋ค,
>>> CHAR ํํ๋ก ๋ค์ ๋ณํ
>>> '2010, 1์' ์ถ๋ ฅ
FROM DUAL;
SELECT
TO_DATE('041030 143000', 'RRMMDD HH24MISS')
FROM DUAL;
SELECT
TO_CHAR(TO_DATE('041030 143000', 'RRMMDD HH24MISS'), 'DD-MON-RRRR HH:MI:SS PM')
>>> 30-10์-2004 02:30:00 ์คํ ์ถ๋ ฅ
FROM DUAL;
SELECT
EMP_NO
, EMP_NAME
, HIRE_DATE
FROM EMPLOYEE
--WHERE HIRE_DATE >= TO_DATE('20000101', 'RRRRMMDD');
--WHERE HIRE_DATE >= '20000101'; >>> ์์ ๊ฐ์ ๊ฒฐ๊ณผ (๋ฌธ์์ด์ ๋ ์ง๋ก ์๋ ํ๋ณํ)
--WHERE HIRE_DATE >= TO_DATE(20000101, 'RRRRMMDD'); >>> ์์ ๊ฐ์ ๊ฒฐ๊ณผ
WHERE HIRE_DATE >= 20000101;
>>> ์๋ ํ๋ณํ์ด ๋์ง์์ '์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ ์ ํ: DATE์ด(๊ฐ) ํ์ํ์ง๋ง NUMBER์' ์ค๋ฅ
>>> ์ซ์๋ ๋ ์ง๋ก ์๋ ํ๋ณํ X
๐ Ref.
* ๋ฌธ์์ด์ '๋ ์ง'๋ก ์๋ ํ๋ณํ O
* ์ซ์๋ '๋ ์ง'๋ก ์๋ ํ๋ณํ X
TO_NUMBER(๋ฌธ์, ํฌ๋งท)
: ๋ฌธ์ํ ๋ฐ์ดํฐ๋ฅผ ์ซ์ํ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝ
SELECT TO_NUMBER('123456789') FROM DUAL;
SELECT '123' + '456' FROM DUAL; >>> 123456์ด ์๋ 579 ์ถ๋ ฅ (๊ฐ๊ฐ ์๋ฆฌ์๋ผ๋ฆฌ ๋ํด์ ธ ์ฐ์ฐ๊ฒฐ๊ณผ ์ถ๋ ฅ)
SELECT '123' + '456A' FROM DUAL; >>> '์์น๊ฐ ๋ถ์ ํฉํฉ๋๋ค' ์ค๋ฅ
>>> ์ซ์๋ก ๋ ๋ฌธ์์ด๋ง ์๋ ํ๋ณํ ๊ฐ๋ฅ
SELECT
EMP_NAME
, HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE = '90/02/06'; >>> ์๋ ํ๋ณํ
SELECT
*
FROM EMPLOYEE
WHERE MOD(EMP_ID, 2) = 1; >>> EMP_ID๋ผ๋ ๋ฌธ์์ด์ ์ซ์๋ก ์๋ ํ๋ณํํ์ฌ ์ฐ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
SELECT '1,000,000' + '500,000' FROM DUAL; >>> ์๋ ํ๋ณํX (ํฌ๋งท๋ ์ซ์์ด๊ธฐ ๋๋ฌธ์)
>>> ์๋์ ์์ฒ๋ผ TO_NUMBER ์ฌ์ฉํด์ผํจ
SELECT
TO_NUMBER('1,000,000', '99,999,999') + TO_NUMBER('500,000', '999,999')
FROM DUAL;
SELECT
EMP_NAME
, EMP_NO
, SUBSTR(EMP_NO, 1, 6) ์์๋ฆฌ
, SUBSTR(EMP_NO, 8) ๋ท์๋ฆฌ
, TO_NUMBER(SUBSTR(EMP_NO, 1, 6)) + TO_NUMBER(SUBSTR(EMP_NO, 8)) ๊ฒฐ๊ณผ
>>> TO_NUMBER๊ฐ ์์ด๋ ์๋ํ๋ณํ์ด ๋์ด ์ถ๋ ฅ๋ฌธ์ ๊ฐ์
FROM EMPLOYEE
WHERE EMP_ID = TO_CHAR(201);
>>> EMP_ID๊ฐ ๋ฌธ์์ด์ด๋ฏ๋ก TO_CHAR ์ฌ์ฉ (but, ๊ธฐ์
ํ์ง์์๋ ์๋ ํ๋ณํ์ด ๋๊ธด ๋จ)
๐ Ref.
* ๋ช
์ํ์ง ์์์ ๊ฒฝ์ฐ, ์๋ ํ๋ณํ์ด ๋๊ธฐ ๋๋ฌธ์ ๋์ํ๋ค๋ ๊ฒ์ ํญ์ ์ธ์ํ๊ณ ์์ด์ผํจ
NVL(์ปฌ๋ผ๋ช
, ์ปฌ๋ผ๊ฐ์ด NULL์ผ ๋ ๋ฐ๊ฟ ๊ฐ)
SELECT
EMP_NAME
, BONUS
, NVL(BONUS, 0) >>> NULL๊ฐ์ด 0์ผ๋ก ์นํ๋์ด ์ถ๋ ฅ
FROM EMPLOYEE;
NVL2(์ปฌ๋ผ๋ช
, ๋ฐ๊ฟ ๊ฐ1, ๋ฐ๊ฟ ๊ฐ2)
: ํด๋น ์ปฌ๋ผ์ด ๊ฐ์ด ์์ผ๋ฉด ๋ฐ๊ฟ ๊ฐ1๋ก ๋ณ๊ฒฝ, ํด๋น ์ปฌ๋ผ์ด NULL์ด๋ฉด ๋ฐ๊ฟ ๊ฐ2๋ก ๋ณ๊ฒฝ
SELECT
EMP_NAME
, BONUS
, NVL2(BONUS, 0.7, 0.5)
FROM EMPLOYEE;
๐โ DECODE๋,
์ฌ๋ฌ ๊ฐ์ง ๊ฒฝ์ฐ์ ์ ํ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต (์ผ์นํ๋ ๊ฐ)
DECODE(๊ณ์ฐ์ or ์ปฌ๋ผ๋ช , ์กฐ๊ฑด๊ฐ1, ์ ํ๊ฐ1, ์กฐ๊ฑด๊ฐ2, ์ ํ๊ฐ2 ...)
SELECT
EMP_ID
, EMP_NAME
, EMP_NO
, DECODE(SUBSTR(EMP_NO, 8, 1), '1', '๋จ', '2', '์ฌ')
FROM EMPLOYEE;
SELECT
EMP_ID
, EMP_NAME
, EMP_NO
, DECODE(SUBSTR(EMP_NO, 8, 1), '1', '๋จ', '์ฌ')
>>> ์กฐ๊ฑด๊ฐ2์๋ '2'๋ฅผ ์๋ตํด๋ ์์ ๋์ผํ ์ถ๋ ฅ
>>> ์กฐ๊ฑด๊ฐ ์์ด ์ ํ๊ฐ์ธ '์ฌ'๋ง ์์ผ๋ฏ๋ก ๋๋จธ์ง๋ ๋ชจ๋ '์ฌ'๋ก ์ถ๋ ฅ
FROM EMPLOYEE;
SELECT
EMP_NAME ์ง์๋ช
, JOB_CODE ์ง๊ธ์ฝ๋
, SALARY ๊ธ์ฌ
, DECODE(JOB_CODE, 'J7', SALARY * 1.1,
'J6', SALARY * 1.15,
'J5', SALARY * 1.2,
SALARY * 1.05) ์ธ์๊ธ์ฌ
FROM EMPLOYEE;
๐โ CASE๋,
์ฌ๋ฌ ๊ฐ์ง ๊ฒฝ์ฐ์ ์ ํ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต (๋ฒ์๊ฐ๋ ๊ฐ๋ฅ)CASE WHEN ์กฐ๊ฑด์ THEN ๊ฒฐ๊ณผ๊ฐ WHEN ์กฐ๊ฑด์ THEN ๊ฒฐ๊ณผ๊ฐ ELSE ๊ฒฐ๊ณผ๊ฐ END
SELECT
EMP_NAME
, SALARY
, CASE
WHEN SALARY > 5000000 THEN '์์'
WHEN SALARY BETWEEN 3000000 AND 5000000 THEN '๊ฒฝ๋ ฅ'
ELSE '์ ์
'
END ๊ตฌ๋ถ
FROM EMPLOYEE;