๊ฐœ์ธ๊ณต๋ถ€/SQL

05. Function : ํ•จ์ˆ˜

LEE_BOMB 2021. 9. 17. 20:53

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;