05. Function : ํจ์
5. Function : ํจ์
ํจ์๋ช
(์ธ์1, ์ธ์2, ...) : ํจ์ ํน์ง์ ๋ฐ๋ผ ์ธ์๊ฐ ์๊ธฐ๋, 1๊ฐ ์ด์์ด๊ธฐ๋ ํจ
ex. ADDER(10,20) = ์ฌ์ฉ์๊ฐ ์ธ์๋ฅผ ๋ฃ์ผ๋ฉด ํจ์๊ฐ ๋ช
๋ น์ ์คํ. 10+20=30
[์ซ์์ฒ๋ฆฌ ํจ์]
โ ABS(n) : n์ ์ ๋๊ฐ
SELECT ABS(-10) FROM DUAL; -> ๋์ถ๊ฐ : 10
* DUAL ์์ฌํ
์ด๋ธ (=์์ํ
์ด๋ธ) : ํ
์ด๋ธ์ ์ ์ฉํ์ง ์๊ณ ๊ฐ์ ๋ณด๊ณ ์ถ์ ๋ ์ด์ฉ
โก FLOOR(n) : ์์์ ์๋๋ฅผ ๋ฒ๋ฆผ
SELECT FLOOR(34.5678) FROM DUAL; -> ๋์ถ๊ฐ : 34
SELECT FLOOR(-34.5678) FROM DUAL; -> ๋์ถ๊ฐ : 35
โข ROUND(n, [m]) : ๋ฐ์ฌ๋ฆผํ ๊ฒฐ๊ณผ๊ฐ
SELECT ROUND(34.5678) FROM DUAL; -> ๋์ถ๊ฐ : 35
SELECT ROUND(34.5678, 2) FROM DUAL; -> ๋์ถ๊ฐ : 34.57
SELECT ROUND(34.5678, -1) FROM DUAL;-> ๋์ถ๊ฐ : 30
โฃ TRUNC(n,m) : n๊ฐ์ ์ ์ญ
SELECT TRUNC(34.5678) FROM DUAL; -> ๋์ถ๊ฐ : 34
SELECT TRUNC(34.5678, 2) FROM DUAL; -> ๋์ถ๊ฐ : 34.56
SELECT TRUNC(34.5678, -2) FROM DUAL; -> ๋์ถ๊ฐ : 30
[FLOOR VS TRUNC]
- ์์์ผ ๋, FLOOR๋ ์์ ์ ์๋ฅผ ๋ฐํ, TRUNC๋ ์ ์ญ
SELECT FLOOR(-45.67), TRUNC(-45.67) FROM DUAL; -> ๋์ถ๊ฐ : FLOOR -46, TRUNC -45
โค MOD(m,n) : ๋๋์
์ฐ์ฐ ํ ๋๋จธ์ง ๊ฐ
SELECT MOD (27, 2), MOD (27, 5), MOD (27, 7) FROM DUAL; -> ๋์ถ๊ฐ : 1, 2, 6
[์์ ] ํ์์ธ ๊ฐ์๊ฒ์
SELECT *
FROM ํ
์ด๋ธ๋ช
WHERE MOD (์นผ๋ผ๋ช
) != 0 ;
* WHERE MOD (์นผ๋ผ๋ช
)=0 ์ ์ง์ ์ถ๋ ฅ
โฅ LOG : ์์ฐ๋ก๊ทธ (๋ฐ์ : 2 or e) * e๋ ๋ฌด๋ฆฌ์
* ๋ฌด๋ฆฌ์ : ๋ถ์๋ก ๋ํ๋ผ ์ ์๋, ์ํํ์ง ์๋ ๋ฌดํ์์ ex ํ์ด, ๋ฃจํธ2, ๋ฃจํธ3...
๋ฐ์๊ฐ 2์ผ๋
SELECT LOG (2,8) FROM DUAL;
* 8์ ๋ํ ์ง์๊ฐ 3์ ์ถ๋ ฅ. 8=2^3
๋ฐ์๊ฐ e์ผ๋
SELECT EXP(1) FROM DUAL; -- e = 2.71828 = EXP(1)
SELECT LOG (EXP(1) , 8) FROM DUAL;
* 8์ ๋ํ ์ง์๊ฐ 2.07944๋ฅผ ์ถ๋ ฅ. 8=e^2.07944...
โฆ EXPํจ์ : ์ง์ํจ์
SELECT EXP(1) FROM DUAL; -- e = 2.71828 = e^1
SELECT EXP(2.07944) FROM DUAL; -- 7.9999... = 8์ ๊ทผ์ฌ์น = e^2.07944
* ๋ฐ์ e์ผ ๋, LOG์ EXPํจ์๋ ์ญํจ์ ๊ด๊ณ
* ๋ก๊ทธํจ์ : ์ง์๊ฐ ๋ฐํ, ์ง์ํจ์ : ๋ก๊ทธ๊ฐ ๋ฐํ
โง POWER : ๊ฑฐ๋ญ์ ๊ณฑ
SELECT POWER(2.71828, 2.07944) FROM DUAL; -- e^2.07944
โจ SQRT : ๊ดํธ ์ ์ซ์๋ฅผ ์์ ์ ๊ณฑ๊ทผ ์ทจํ์ฌ ๊ทธ ๊ฐ์ ๋ฐํ
* ์ ๊ณฑ๊ทผ : x^2=a์ผ ๋, x๋ a์ ์ ๊ณฑ๊ทผ
SELECT SQRT(49) FROM DUAL;
[๋ฌธ์์ฒ๋ฆฌ ํจ์]
โ UPPER(char) : ๋ฌธ์์ด์ ๋ชจ๋ ๋๋ฌธ์๋ก ๋ณ๊ฒฝ
SELECT 'Welcome to Oracle', UPPER('Welcome to Oracle') FROM DUAL; -> ์ถ๋ ฅ๊ฐ : WELCOME TO ORACLE
โก LOWER(char) : ๋ฌธ์์ด์ ๋ชจ๋ ์๋ฌธ์๋ก ๋ณ๊ฒฝ
SELECT 'Welcome to Oracle', LOWER('Welcome to Oracle') FROM DUAL; -> ์ถ๋ ฅ๊ฐ welcome to oracle
โข INITCAP(char) : ๋จ์ด ์์๋ง ๋๋ฌธ์๋ก ๋ณ๊ฒฝ
SELECT 'WELCOME TO ORACLE', INITCAP('WELCOME TO ORACLE') FROM DUAL; -> ์ถ๋ ฅ๊ฐ Welcome To Oracle
โฃ LENGTH(char) : ์์ ๊ธธ์ด ์ถ๋ ฅ
SELECT LENGTH('Oracle'), LENGTH('์ค๋ผํด') FROM DUAL; -> ์ถ๋ ฅ๊ฐ : oracle 6, ์ค๋ผํด 3
SELECT LENGTHB('Oracle'), LENGTHB('์ค๋ผํด') FROM DUAL; -> ์ถ๋ ฅ๊ฐ : oracle 6, ์ค๋ผํด 9
* LENGTHB(char) : Byte๋จ์๋ก ์ฒ๋ฆฌ
* ํ๊ธ์ 2or3๋ฐ์ดํธ
โฅ SUBSTR(char, m ,[n]) : ์์์์น๋ถํฐ ์ ํ ๊ฐ์๋งํผ์ ๋ฌธ์๋ฅผ ์ถ์ถ
SELECT SUBSTR('Welcome to Oracle', 4, 3) FROM DUAL;
FROM DUAL; -> ์ถ๋ ฅ๊ฐ com (์ผ์ชฝ ๊ธฐ์ค)
SELECT SUBSTR('Welcome to Oracle', -4, 3)
FROM DUAL; -> ์ถ๋ ฅ๊ฐ acl (์ค๋ฅธ์ชฝ ๊ธฐ์ค)
* SUBSTRB(char, m ,[n]) : Byte๋จ์๋ก ์ฒ๋ฆฌ
[์์ ] ์๋
๊ณผ ์ ์ถ๋ ฅ
SUBSTR(HIREDATE, 1, 2) ๋
๋,
SUBSTR(HIREDATE, 4, 2) ๋ฌ FROM ํ
์ด๋ธ๋ช
;
โฆ TRIM (char1[,char2]) : ํน์ ๋ฌธ์(๊ณต๋ฐฑ) ์ ๊ฑฐ
SELECT TRIM(' Oracle ') FROM DUAL; -> ์ถ๋ ฅ๊ฐ : Oracle
SELECT TRIM('o' FROM 'oracleclub') name FROM DUAL; -> ์ถ๋ ฅ๊ฐ : racleclub
โง REPLACE(char1, str1, str2) : ๋ฌธ์์ด ์นํ
SELECT REPLACE('ํ๊ธธ๋', 'ํ', '๊น') FROM DUAL; -> ์ถ๋ ฅ๊ฐ : ๊น๊ธธ๋
[๋ ์ง์ฒ๋ฆฌ ํจ์]
โ SYSDATE : ์์คํ
๊ธฐ์ค ๋ ์ง์ ์๊ฐ
SELECT SYSDATE FROM DUAL; -- 2021-09-07 -> 21/09/07
* ์ต์ ๋จ์๋ 1์ด
โก ์ผ(DAY) ๊ณ์ฐ
SELECT SYSDATE-1 ์ด์
SYSDATE ์ค๋
SYSDATE+1 ๋ด์ผ
FROM DUAL;
โข ROUND(d[,F]) : ๋ ์ง ๋ฐ์ฌ๋ฆผ
SELECT HIREDATE, ROUND(HIREDATE, 'MONTH') FROM EMP;
* F๊ฐ์ด ์๋ต๋๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ์ง๋ก ๋ฐ์ฌ๋ฆผ
โฃ MONTHS_BETWEEN(a1, a2)
a1๊ณผ a2 ์ฌ์ด์ ๋ฌ์ ์๋ฅผ NUMBERํ์ผ๋ก ์ถ๋ ฅ
SELECT ENAME, SYSDATE, HIREDATE,
ROUND(MONTHS_BETWEEN(SYSDATE, HIREDATE)) FROM EMP;
[ํ ๋ณํ ํจ์]
to_char() : ๋ ์งํ, ์ซ์ํ -> ๋ฌธ์ํ ๋ณํ(format ์ด์ฉ)
to_date() : ๋ฌธ์ํ, ์ซ์ํ -> ๋ ์งํ ๋ณํ(format ์ด์ฉ)
to_number() : ๋ฌธ์ํ -> ์ซ์ํ ๋ณํ(format ์ด์ฉ)
โ TO_CHAR : ๋ ์งํ, ์ซ์ํ -> ๋ฌธ์ํ
SELECT ์นผ๋ผ๋ช
, TO_CHAR(์นผ๋ผ๋ช
, 'YYYY-MM-DD') FROM DUAL;
SELECT ์นผ๋ผ๋ช
TO_CHAR (์นผ๋ผ๋ช
, 'YYYY/MM/DD DAY') FROM ํ
์ด๋ธ๋ช
;
SELECT ์นผ๋ผ๋ช
TO_CHAR (์นผ๋ผ๋ช
, 'YY/MON/DD DY') FROM ํ
์ด๋ธ๋ช
;
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD, HH24:MI:SS') FROM DUAL;
* ์ซ์ํ -> ๋ฌธ์ํ
SELECT ENAME, SAL, TO_CHAR (SAL, 'L999,999') -- ํํ๋จ์, ์ฒ๋จ์ ์ฝค๋ง
FROM EMP;
โก TO_DATE : ์ซ์ํ/๋ฌธ์ํ -> ๋ ์งํ
SELECT ENAME, HIREDATE FROM EMP
WHERE HIREDATE=TO_DATE(19810220,'YYYYMMDD');
SELECT TRUNC(SYSDATE-TO_DATE('2008/01/01', 'YYYY/MM/DD'))
FROM DUAL;
โข TO_NUMBER : ๋ฌธ์ํ -> ์ซ์ํ
SELECT '20,000' - '10,000' FROM DUAL; -- error
SELECT TO_NUMBER('20,000', '99,999') - TO_NUMBER('10,000', '99,999')
FROM DUAL; -- 10000
[Decode ํจ์]
encoding : ๊ธฐ๊ณ์ด / decoding : ์ธ๊ฐ์ด
SELECT ename, deptno FROM emp;
SELECT ename, deptno,
DECODE(deptno, 10, '๊ธฐํ์ค', 20, '์ฐ๊ตฌ์ค', '๊ธฐํ') as "decoding"
FROM emp;