๐Ÿ—„๏ธ Backend/Oracle

์˜ค๋ผํด(Oracle) - (DQL) : ํ•จ์ˆ˜(๋‹จ์ผํ–‰ ํ•จ์ˆ˜)

kongmi 2023. 2. 14. 19:22
  • ์˜ค๋ผํด์—์„œ๋Š” (1)๋‚ด์žฅ ํ•จ์ˆ˜์™€ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”์— ์˜ํ•ด์„œ ์ง์ ‘ ์ •์˜ํ•œ (2)์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด์ง.
  • ๋‹จ์ผํ–‰ ํ•จ์ˆ˜์™€ ๋‹ค์ค‘ํ–‰ ํ•จ์ˆ˜(์ง‘๊ณ„ํ•จ์ˆ˜)๋กœ ๋‚˜๋ˆ„์–ด์ง.
DUAL ํ…Œ์ด๋ธ” ํ™œ์šฉ
SYS ๊ณ„์ •์—์„œ ์ œ๊ณตํ•˜๋Š” ํ…Œ์ด๋ธ”๋กœ ํ•จ์ˆ˜๋‚˜ ๊ณ„์‚ฐ์‹์„ ํ…Œ์ด๋ธ” ์ฐธ์กฐ ์—†์ด ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ DUMMY ํ…Œ์ด๋ธ”
์ฆ‰, ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”!

์ˆซ์žํ•จ์ˆ˜

ABS (์ ˆ๋Œ€๊ฐ’)

SELECT ABS(-10) FROM DUAL; -- 10

ROUND (๋ฐ˜์˜ฌ๋ฆผ)

SELECT ROUND(1234.5678) AS ROUND FROM DUAL; -- ๋ฐ˜์˜ฌ๋ฆผ ์ž๋ฆฌ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์†Œ์ˆ˜์  ์ดํ•˜ ์ฒซ๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ
SELECT ROUND(1234.5678, 0) AS ROUND_0, -- 1235
    ROUND(1234.5678,1) AS ROUND_1, -- 1234.6
    ROUND(1234.5678,3) AS ROUND_3, -- 1234.568
    ROUND(1234.5678,4) AS ROUND_4, -- 1234.5678
    ROUND(1234.5678,-1) AS ROUND_๋งˆ์ด๋„ˆ์Šค1, -- 1230
    ROUND(1234.5678,-2) AS ROUND_๋งˆ์ด๋„ˆ์Šค2 -- 1200
    FROM DUAL;

TRUNC (๋ฒ„๋ฆผ)

SELECT TRUNC(1234.5678, 0) AS TRUNC_0, -- 1234
    TRUNC(1234.5678,1) AS TRUNC_1, -- 1234.5
    TRUNC(1234.5678,3) AS TRUNC_3, -- 1234.567
    TRUNC(1234.5678,4) AS TRUNC_4, -- 1234.5678
    TRUNC(1234.5678,-1) AS TRUNC_๋งˆ์ด๋„ˆ์Šค1, -- 1230
    TRUNC(1234.5678,-2) AS TRUNC_๋งˆ์ด๋„ˆ์Šค2 -- 1200
    FROM DUAL;

MOD (๋‚˜๋จธ์ง€)

SELECT MOD(21,5) FROM DUAL; -- 1

CEIL (์†Œ์ˆ˜์  ์ดํ•˜๊ฐ€ ์žˆ์œผ๋ฉด ๋ฌด์กฐ๊ฑด ์˜ฌ๋ฆผ)

SELECT CEIL(34.34) FROM DUAL; -- 35

FLOOR (์†Œ์ˆ˜์  ์ดํ•˜๊ฐ€ ์žˆ์œผ๋ฉด ๋ฌด์กฐ๊ฑด ๋‚ ๋ฆผ)

SELECT FLOOR(34.99999) FROM DUAL; -- 34

POWER (์ •์ˆ˜ A๋ฅผ ์ •์ˆ˜ B๋งŒํผ ์ œ๊ณฑ)

SELECT POWER(2,4) FROM DUAL; -- 16

๋ฌธ์ž ํ•จ์ˆ˜

  • ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋กœ ๋ถ€ํ„ฐ ํŠน์ • ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ

UPPER (๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ)

LOWER (์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ)

SELECT ENAME, UPPER(ENAME), LOWER(ENAME) FROM EMP;

INITCAP (์ฒซ ๊ธ€์ž ๋Œ€๋ฌธ์ž, ๋‚˜๋จธ์ง€ ์†Œ๋ฌธ์ž)

SELECT INITCAP('yoo young yoo') FROM DUAL;

๐Ÿธ WHERE ์กฐ๊ฑด์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ

SELECT * FROM EMP WHERE UPPER(ENAME) = UPPER('james');

๐Ÿธ UPPER ํ•จ์ˆ˜์™€ LIKE ์‚ฌ์šฉ

SELECT * FROM EMP WHERE LOWER(ENAME) LIKE LOWER('%JA%');

๐Ÿธ ์‚ฌ์› ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž, ์ง์ฑ…์€ ์ฒซ์ž ๋Œ€๋ฌธ์ž ๋‚˜๋จธ์ง€๋Š” ์†Œ๋ฌธ์ž ๋ณ€๊ฒฝํ•˜๊ณ  ๊ธ‰์—ฌ๊ฐ€ ๋†’์€ ์ˆœ์œผ๋กœ ์ถœ๋ ฅ

SELECT UPPER(ENAME), INITCAP(JOB) FROM EMP ORDER BY SAL DESC;

LENGTH (๋ฌธ์ž์—ด ๊ธธ์ด)

SELECT ENAME, LENGTH(ENAME) FROM EMP;

LENGTHB (๋ฌธ์ž์—ด ๋ฐ”์ดํŠธ ์ˆ˜)

SELECT LENGTH('ํ•œ'), LENGTHB('ํ•œ') FROM DUAL;
LENGTH('ํ•œ') : 1 , LENGTHB('ํ•œ') : 3
์˜ค๋ผํด XE ๋ฒ„์ „์€ ๋ฌธ์ž 1๊ฐœ๋Š” 3byte

๐Ÿธ ์ด๋ฆ„์˜ ๊ธธ์ด๊ฐ€ 5์™€ ๊ฐ™๊ฑฐ๋‚˜ ํฐ ์‚ฌ์›์˜ ์ด๋ฆ„, ์‚ฌ์›๋ฒˆํ˜ธ, ์ง์ฑ…์„ ์—ฐ๋ด‰ ์ˆœ์œผ๋กœ ํ‘œ์‹œ (๋‹จ, ๋ณด๋„ˆ์Šค ์ œ์™ธ)

SELECT ENAME, EMPNO, JOB, SAL*12 AS ์—ฐ๋ด‰
    FROM EMP
    WHERE LENGTH(ENAME) >= 5
    ORDER BY ์—ฐ๋ด‰ DESC;

๐Ÿธ ์ง์ฑ… ์ด๋ฆ„์ด 6์ž ์ด์ƒ์ด๊ณ  COMM์ด ์žˆ๋Š” ์‚ฌ์› ์ถœ๋ ฅ

SELECT * FROM EMP
    WHERE LENGTH(JOB) >= 6
    AND COMM IS NOT NULL AND COMM != 0;

SUBSTR / SUBSTRB

  • ๋Œ€์ƒ ๋ฌธ์ž์—ด์ด๋‚˜ ์ปฌ๋Ÿผ์˜ ์ž๋ฃŒ์—์„œ ์‹œ์ž‘์œ„์น˜๋ถ€ํ„ฐ ๊ธธ์ด๋งŒํผ์˜ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
  • ์ธ๋ฑ์Šค ๊ฐœ๋… ์•„๋‹˜! (1๋ถ€ํ„ฐ ์‹œ์ž‘)
SUBSTR(๋ฌธ์ž์—ด๋ฐ์ดํ„ฐ, ์‹œ์ž‘์œ„์น˜, ๊ธธ์ด)
SELECT JOB, SUBSTR(JOB,1,2), SUBSTR(JOB,3,2), SUBSTR(JOB,5)
    FROM EMP ORDER BY JOB;

๐Ÿธ SUBSTR ํ•จ์ˆ˜์™€ ๋‹ค๋ฅธ ํ•จ์ˆ˜ ํ•จ๊ป˜ ์‚ฌ์šฉ

SELECT JOB,
-- JOB์˜ ๊ธธ์ด๋Š” 5์ด๊ณ  5์— ๋Œ€ํ•œ ์Œ์ˆ˜๋ฅผ ์ทจํ•˜๋ฉด ๋’ค์—์„œ ๋ถ€ํ„ฐ ์Œ์ˆ˜๊ฐ’์ด ์ปค์ง€๋ฉด์„œ ์ฝ์–ด ๋ƒ„
    SUBSTR(JOB,-LENGTH(JOB)),
    SUBSTR(JOB, -LENGTH(JOB), 2),
    SUBSTR(JOB, -3) -- ๋’ค์—์„œ ๋ถ€ํ„ฐ 3๊ธ€์ž
FROM EMP;

INSTR

  • ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ ์•ˆ์— ํŠน์ • ๋ฌธ์ž๋‚˜ ๋ฌธ์ž์—ด์ด ์–ด๋””์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ
SELECT INSTR('HELLO, ORACLE!!','L') AS INSTR_1,
INSTR('HELLO, ORACLE!!','L',5) AS INSTR_2,  -- ์‹œ์ž‘ ์œ„์น˜ ์ง€์ • ๊ฐ€๋Šฅ!
INSTR('HELLO, ORACLE!!','L',2,2) AS INSTR_3 FROM DUAL; -- ์‹œ์ž‘ ์œ„์น˜์—์„œ ์ฐพ์„ ๋ฌธ์ž๊ฐ€ ๋ช‡๋ฒˆ์งธ ์ธ์ง€ ์ง€์ •

REPLACE (๋ฌธ์ž ๋Œ€์ฒด)

  • ํŠน์ • ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ์— ํฌํ•จ๋œ ๋ฌธ์ž๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ž๋กœ ๋Œ€์ฒดํ•  ๋•Œ ์‚ฌ์šฉ
  • ๋ฌธ์ž์—ด์„ ๋„ฃ์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œ๋จ
SELECT '010-1234-5678' AS ๋ณ€๊ฒฝ์ด์ „,
    REPLACE('010-1234-5678', '-', ' ') AS ํ•˜์ดํ”ˆ์„๊ณต๋ฐฑ์œผ๋กœ,
    REPLACE('010-1234-5678', '-') AS ํ•˜์ดํ”ˆ์‚ญ์ œ
FROM DUAL;

LPAD / RPAD (ํŠน์ • ๋ฌธ์ž๋กœ ์ฑ„์šฐ๋Š”..)

  • ๊ณต๊ฐ„์— ์นธ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ณ , ๋นˆ ์นธ๋งŒํผ ํŠน์ • ๋ฌธ์ž๋กœ ์ฑ„์šฐ๋Š” ๊ธฐ๋Šฅ
SELECT LPAD('ORACLE', 10, '+') FROM DUAL; -- ++++ORACLE
SELECT RPAD('ORACLE', 10, '+') FROM DUAL; -- ORACLE++++
SELECT 'ORACLE', -- ORACLE
    LPAD('ORACLE', 10, '#') AS LPAD_1, -- ####ORACLE
    RPAD('ORACLE', 10, '*') AS RPAD_1, -- ORACLE****
    LPAD('ORACLE', 10) AS LPAD_2, -- (๊ณต๋ฐฑ)    ORACLE
    RPAD('ORACLE', 10) AS RPAD_2 -- ORACLE    (๊ณต๋ฐฑ)
FROM DUAL;

๐Ÿธ ์‘์šฉ ์˜ˆ์ œ) ๊ฐœ์ธ์ •๋ณด ๋’ท์ž๋ฆฌ๋ฅผ * ํ‘œ์‹œ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

SELECT
    RPAD('940909-', 14, '*') AS ์ฃผ๋ฏผ๋ฒˆํ˜ธ,
    RPAD('010-1234-', 13, '*') AS  ํ•ธ๋“œํฐ๋ฒˆํ˜ธ
FROM DUAL;

CONCAT (๋‘ ๋ฌธ์ž์—ด ํ•ฉ์น˜๋Š”)

SELECT CONCAT(EMPNO, ENAME) AS ์—ฐ๊ฒฐ1,
    CONCAT(EMPNO, CONCAT(' - ', ENAME)) AS ์—ฐ๊ฒฐ2
FROM EMP
    WHERE ENAME = 'JAMES';

TRIM / LTRIM / RTRIM (์ง€์šฐ๊ธฐ)

  • ๋ฌธ์ž์—ด ๋‚ด์—์„œ ํŠน์ • ๋ฌธ์ž๋ฅผ ์ง€์šฐ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
SELECT '[' || TRIM(' _ORACLE_ ') || ']' AS TRIM,
    '[' || LTRIM(' _ORACLE_ ') || ']' AS LTRIM,
    '[' || LTRIM('<_ORACLE_>', '<_') || ']' AS LTRIM_2,
    '[' || RTRIM(' _ORACLE_ ') || ']' AS RTRIM,
    '[' || RTRIM('<_ORACLE_>', '_>') || ']' AS RTRIM_2
FROM DUAL;

๋‚ ์งœ ํ•จ์ˆ˜

SYSDATE (ํ˜„์žฌ ๋‚ ์งœ)

SELECT SYSDATE FROM DUAL;
SELECT SYSDATE AS NOW, -- ์šด์˜์ฒด์ œ์—์„œ ์ฝ์–ด์˜จ ํ˜„์žฌ ๋‚ ์งœ ์ •๋ณด
    SYSDATE-1 AS YESTERDAY, -- ์šด์˜์ฒด์ œ์—์„œ ์ฝ์–ด์˜จ ๋‚ ์งœ ์ •๋ณด์—์„œ 1์ผ์„ ๋บŒ
    SYSDATE+1 AS TOMORROW -- ์šด์˜์ฒด์ œ์—์„œ ์ฝ์–ด์˜จ ๋‚ ์งœ ์ •๋ณด์—์„œ 1์ผ์„ ๋”ํ•จ
FROM DUAL;

ADD_MONTHS

  • ๋ช‡ ๊ฐœ์›” ์ดํ›„์˜ ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
  • ํŠน์ • ๋‚ ์งœ์— ์ง€์ •ํ•œ ๊ฐœ์›” ์ดํ›„ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • ADD_MONTHS(๋‚ ์งœ ๋ฐ์ดํ„ฐ, ๋”ํ•  ๊ฐœ์›” ์ˆ˜)
SELECT SYSDATE,
    ADD_MONTHS(SYSDATE, 5)
FROM DUAL;

๐Ÿธ (EMP). ์‚ฌ์›์— ๋Œ€ํ•ด ์‚ฌ์›๋ฒˆํ˜ธ, ์ด๋ฆ„, ์ž…์‚ฌ์ผ, ์ž…์‚ฌ 10์ฃผ๋…„ ๋‚ ์งœ ์ถœ๋ ฅ

SELECT EMPNO, ENAME, HIREDATE,
	ADD_MONTHS(HIREDATE, 120) AS ์ž…์‚ฌ10์ฃผ๋…„
FROM EMP;

๐Ÿธ (DUAL). ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ 8๊ฐœ์›” ์ดํ›„ ์‹œ๊ฐ„ ์ถœ๋ ฅ

SELECT SYSDATE AS ํ˜„์žฌ์‹œ๊ฐ„,
	ADD_MONTHS(SYSDATE, 8) AS "8๊ฐœ์›”์ดํ›„"
FROM DUAL;

MONTHS_BETWEEN

  • ๋‘ ๋‚ ์งœ๊ฐ„์˜ ๊ฐœ์›” ์ˆ˜ ์ฐจ์ด๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
  • ๋””ํ…Œ์ผํ•˜๊ฒŒ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์ˆ˜์  ๋‚ ๋ฆฌ๋Š” TRUNC ๊ธฐ๋Šฅ ์จ์ค˜์•ผ ํ•จ.
SELECT EMPNO, ENAME, HIREDATE, SYSDATE,
    MONTHS_BETWEEN(HIREDATE, SYSDATE) AS MONTH1,
    FLOOR(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS MONTH2,
    TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS MONTH3
FROM EMP;

NEXT_DAY

  • ๋Œ์•„์˜ค๋Š” ์š”์ผ์˜ ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
  • NEXT_DAY(๋‚ ์งœ๋ฐ์ดํ„ฐ, ์š”์ผ๋ฌธ์ž) : ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋Œ์•„์˜ค๋Š” ์š”์ผ์˜ ๋‚ ์งœ ์ถœ๋ ฅ
SELECT SYSDATE, NEXT_DAY(SYSDATE, '์›”์š”์ผ') FROM DUAL;

LAST_DAY

  • ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
  • LAST_DAY(๋‚ ์งœ ๋ฐ์ดํ„ฐ) : ๋‚ ์งœ๊ฐ€ ์†ํ•œ ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์งœ ์ถœ๋ ฅ
SELECT SYSDATE, LAST_DAY(SYSDATE) FROM DUAL;

EXTRACT (๋‚ ์งœ ์ •๋ณด ์ถ”์ถœ)

SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL; -- 1998
SELECT * FROM EMP
    WHERE EXTRACT(MONTH FROM HIREDATE) = 12; -- ์ž…์‚ฌ์ผ์ด 12์›”์ธ ์‚ฌ๋žŒ ์ถœ๋ ฅ
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; -- ํ˜„์žฌ ๋ช‡์›”์ธ์ง€

ํ˜• ๋ณ€ํ™˜ ํ•จ์ˆ˜

  • ์˜ค๋ผํด๋„ ์ž๋ฐ”์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜๊ณผ ์ž๋™(๋ฌต์‹œ์ ) ํ˜•๋ณ€ํ™˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋™(๋ฌต์‹œ์ ) ํ˜•๋ณ€ํ™˜ : ์ˆซ์ž์™€ ๋ฌธ์ž ์ž๋ฃŒํ˜•์˜ ์—ฐ์‚ฐ์€ ์ž๋™์œผ๋กœ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ ๋ฉ๋‹ˆ๋‹ค.
    (์ž๋ฐ”์™€ ์ฐจ์ด์ )
SELECT EMPNO, ENAME, EMPNO + '500' FROM EMP; -- ์ž๋™ ํ˜•๋ณ€ํ™˜
SELECT EMPNO, ENAME, EMPNO + 'ABCD' FROM EMP; -- ERROR!!

TO_CHAR

  • ๋‚ ์งœ, ์ˆซ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • ์ฃผ๋กœ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•จ.
  • TO_CHAR(๋‚ ์งœ๋ฐ์ดํ„ฐ, ์ถœ๋ ฅ๋˜๊ธธ ์›ํ•˜๋Š” ๋ฌธ์ž์—ด ํฌ๋งท)
SELECT
	TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') AS "ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„"
FROM DUAL;

๐Ÿธ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

SELECT SYSDATE,
    TO_CHAR(SYSDATE, 'CC') AS "๋ช‡ ์„ธ๊ธฐ",
    TO_CHAR(SYSDATE, 'YY') AS "์—ฐ๋„",
    TO_CHAR(SYSDATE, 'YYYY/MM/DD PMHH24:MI') AS "์—ฐ/์›”/์ผ ์‹œ:๋ถ„",
    TO_CHAR(SYSDATE, 'Q') AS ์ฟผํ„ฐ,
    TO_CHAR(SYSDATE, 'DD') AS ์ผ,
    TO_CHAR(SYSDATE, 'DDD') AS ๊ฒฝ๊ณผ์ผ,
    TO_CHAR(SYSDATE, 'HH') AS "12์‹œ๊ฐ„์ œ",
    TO_CHAR(SYSDATE, 'HH12') AS "12์‹œ๊ฐ„์ œ2",
    TO_CHAR(SYSDATE, 'HH24') AS "24์‹œ๊ฐ„์ œ",
    TO_CHAR(SYSDATE, 'W') AS ๋ช‡์ฃผ์ฐจ
FROM DUAL;

SELECT SYSDATE,
    TO_CHAR(SYSDATE, 'HH24:MI:SS') AS MM,
    TO_CHAR(SYSDATE, 'HH12:MI:SS AM') AS MON_KR,
    TO_CHAR(SYSDATE, 'HH:MI:SS P.M.') AS MON_JP
FROM DUAL;

NLS(National Language Support)

  • ํŠน์ • ๊ตญ๊ฐ€ ์–ธ์–ด ํ˜•์‹์— ๋งž์ถฐ์„œ ๋‚ ์งœ ์ถœ๋ ฅ
SELECT SYSDATE,
    TO_CHAR(SYSDATE, 'MM') AS MM,
    TO_CHAR(SYSDATE, 'MON', 'NLS_DATE_LANGUAGE = KOREAN') AS MON_KR,
    TO_CHAR(SYSDATE, 'MON', 'NLS_DATE_LANGUAGE = JAPANESE') AS MON_JP,
    TO_CHAR(SYSDATE, 'MON', 'NLS_DATE_LANGUAGE = ENGLISH') AS MON_EN,
    TO_CHAR(SYSDATE, 'MONTH', 'NLS_DATE_LANGUAGE = KOREAN') AS MON_KR,
    TO_CHAR(SYSDATE, 'MONTH', 'NLS_DATE_LANGUAGE = JAPANESE') AS MON_JP,
    TO_CHAR(SYSDATE, 'MONTH', 'NLS_DATE_LANGUAGE = ENGLISH') AS MON_EN
FROM DUAL;

SELECT SYSDATE,
    TO_CHAR(SYSDATE, 'MM') AS MM,
    TO_CHAR(SYSDATE, 'DD', 'NLS_DATE_LANGUAGE = KOREAN') AS MON_KR,
    TO_CHAR(SYSDATE, 'DY', 'NLS_DATE_LANGUAGE = JAPANESE') AS MON_JP,
    TO_CHAR(SYSDATE, 'DY', 'NLS_DATE_LANGUAGE = ENGLISH') AS MON_EN,
    TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE = KOREAN') AS MON_KR,
    TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE = JAPANESE') AS MON_JP,
    TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE = ENGLISH') AS MON_EN
FROM DUAL;

์ˆซ์ž ๋ฐ์ดํ„ฐ ํ˜•์‹ ์ง€์ • ํ›„ ์ถœ๋ ฅ

  • 9 : ์ˆซ์ž์˜ ํ•œ์ž๋ฆฌ๋ฅผ ์˜๋ฏธํ•˜๊ณ , ๋นˆ ์ž๋ฆฌ๋ฅผ ์ฑ„์šฐ์ง€ ์•Š์Œ
  • 0 : ๋นˆ ์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ์ฑ„์›€
  • $ : ๋‹ฌ๋Ÿฌ ํ‘œ์‹œ๋ฅผ ๋ถ™์ž„
  • L : ๊ตญ๊ฐ€ ํ™”ํ ๋‹จ์œ„ ํ‘œ์‹œ(์šด์˜์ฒด์ œ ์–ธ์–ด ๊ธฐ์ค€?)
  • . : ์†Œ์ˆ˜์  ํ‘œ์‹œ
  • , : ์ฒœ ๋‹จ์œ„ ํ‘œ์‹œ
SELECT SAL,
    TO_CHAR(SAL, '$999,999') AS SAL_$, -- ๋‹ฌ๋Ÿฌ ํ‘œ์‹œํ•˜๊ณ  ๋นˆ ์ž๋ฆฌ ์ฑ„์šฐ์ง€ ์•Š์Œ
    TO_CHAR(SAL, 'L999,999') AS SAL_L, -- ์ง€์—ญ ํ™”ํ ํ‘œ์‹œ. ์ฒœ ๋‹จ์œ„์— ,๋„ฃ์Œ
    TO_CHAR(SAL, '999,999.00') AS SAL_1, -- ์†Œ์ˆ˜์  ์ดํ•˜ 2์ž๋ฆฌ๊นŒ์ง€ ํ‘œ์‹œ
    TO_CHAR(SAL, '$000,999,999.00') AS SAL_2, -- ๋นˆ ์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ์ฑ„์›€
FROM EMP;

TO_NUMBER

  • ์ˆซ์ž ํƒ€์ž…์˜ ๋ฌธ์ž์—ด์„ ์ˆซ์ž ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
  • ์ž๋™ ํ˜•๋ณ€ํ™˜ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์•ˆ ์“ฐ์ž„.
SELECT '1300' - '1500', '1300' + '1500' FROM DUAL;
-- TO_NUMBER ์•ˆ์จ๋„ ์ž๋™ ํ˜•๋ณ€ํ™˜ ํ•ด์คŒ.

TO_DATE

  • ์›ํ•˜๋Š” ํฌ๋งท ํ˜•ํƒœ์˜ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • TO_CHAR์™€ ๋ณด์ด๋Š”๊ฑด ๋˜‘๊ฐ™์ง€๋งŒ ๋ณ€ํ™˜๋˜๋Š” ๋ฐฉํ–ฅ์ด ๋‹ค๋ฅด๋‹ค.
SELECT TO_DATE('22/08/20', 'YY/MM/DD') FROM DUAL; -- ๋ฌธ์ž -> DATE
SELECT TO_CHAR(SYSDATE, 'YY/MM/DD') FROM DUAL; -- DATE -> ๋ฌธ์ž
SELECT *
    FROM EMP
    WHERE HIREDATE < TO_DATE('1981/01/01', 'YY/MM/DD');
  • ๊ทผ๋ฐ.. DATE๋ž‘ ๋ฌธ์ž์—ด(๋‚ ์ž)๊ฐ€ ํƒ€์ž…์ด ๋‹ค๋ฅธ๋ฐ๋„ ๋น„๊ต๊ฐ€ ๋จ..(?) ๐Ÿคฃ

๐Ÿธ 1981๋…„ 6์›” 1์ผ ์ดํ›„์— ์ž…์‚ฌํ•œ ์‚ฌ์› ์ •๋ณด ์ถœ๋ ฅํ•˜๊ธฐ

SELECT *
    FROM EMP
    WHERE HIREDATE > TO_DATE('1981/06/01', 'YY/MM/DD');

NULL ํ•จ์ˆ˜

NVL

  • NVL(๋ฐ์ดํ„ฐ์—ด, ์•ž์˜ ๋ฐ์ดํ„ฐ๊ฐ€ NULL์ผ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํ•  ๋ฐ์ดํ„ฐ)
SELECT EMPNO, ENAME, SAL, COMM, SAL*12+NVL(COMM,0) AS "์—ฐ๋ด‰(COMMํฌํ•จ)"
    FROM EMP;

NVL2

  • NVL2(๊ฒ€์‚ฌํ•  ๋ฐ์ดํ„ฐ์—ด, NULL์ด ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์‹, NULL์ธ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์‹)
SELECT EMPNO, ENAME, COMM, 
    NVL2(COMM, 'O', 'X') AS "NULL ์—ฌ๋ถ€ ํ‘œ์‹œ",
    NVL2(COMM, SAL*12+COMM, SAL*12) AS "์—ฐ๋ด‰"
    FROM EMP;

NULLIF

  • ๋‘ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋™์ผ์ธ์ง€ ์•„๋‹Œ์ง€์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
  • ๊ฐ™์œผ๋ฉด NULL ๋ฐ˜ํ™˜, ๋‹ค๋ฅด๋ฉด ์ฒซ๋ฒˆ์งธ ๊ฐ’ ๋ฐ˜ํ™˜
SELECT NULLIF(10,10), NULLIF('A', 'B') FROM DUAL;

DECODE ๋ฌธ

  • ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์กฐ๊ฑด ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , ์ผ์น˜ํ•˜๋Š” ๊ฐ’์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ ์ถœ๋ ฅ
  • ์กฐ๊ฑด๋ฌธ ๋˜๋Š” SWITCH๋ฌธ๊ณผ ์œ ์‚ฌํ•จ!
SELECT EMPNO, ENAME, JOB, SAL,
    DECODE(JOB,
    'MANAGER', SAL*1.1,
    'SALESMAN', SAL*1.05,
    'ANALYST', SAL,
    SAL*1.03) AS ๊ธ‰์—ฌ์ธ์ƒ
    FROM EMP;

CASE ๋ฌธ

  • ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์กฐ๊ฑด ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , ์ผ์น˜ํ•˜๋Š” ๊ฐ’์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ ์ถœ๋ ฅ
SELECT EMPNO, ENAME, JOB, SAL,
    CASE JOB
        WHEN 'MANAGER' THEN SAL*1.1
        WHEN 'SALESMAN' THEN SAL*1.05
        WHEN 'ANALYST' THEN SAL
        ELSE SAL*1.03
    END AS ๊ธ‰์—ฌ์ธ์ƒ
    FROM EMP;

์—ด ๊ฐ’์— ๋”ฐ๋ผ ์ถœ๋ ฅ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋Š” CASE ๋ฌธ

  • if - else ๋ฌธ๊ณผ ์œ ์‚ฌํ•จ
  • THEN ์ ˆ์—๋Š” ๋ฌธ์ž์—ด ๋„ฃ์„ ๋•Œ ' ' ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋„ฃ์–ด์•ผ ํ•จ.
SELECT EMPNO, ENAME, COMM,
    CASE
        WHEN COMM IS NULL THEN 'ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ'
        WHEN COMM = 0 THEN '์ˆ˜๋‹น์—†์Œ'
        WHEN COMM > 0 THEN '์ˆ˜๋‹น : ' || COMM
    END AS ์ˆ˜๋‹นํ‘œ์‹œ
FROM EMP;

๐Ÿธ์‹ค์Šต๋ฌธ์ œ๐Ÿถ

SELECT EMPNO,
    RPAD(SUBSTR(EMPNO,1,2),4,'*') AS MASKING_EMPNO,
    ENAME,
    RPAD(SUBSTR(ENAME,1,1),5,'*') AS MASKING_ENAME
    FROM EMP
    WHERE LENGTH(ENAME) >= 5 AND LENGTH(ENAME) < 6;

SELECT EMPNO, ENAME, SAL,
    TRUNC(SAL/21.5,2) AS DAY_PAY,
    ROUND(SAL/21.5/8,2) AS TIME_PAY
FROM EMP;

SELECT EMPNO, ENAME,
    TO_CHAR(HIREDATE, 'YYYY/MM/DD') AS HIREDATE,
    TO_CHAR(NEXT_DAY(ADD_MONTHS(HIREDATE, 3),'์›”์š”์ผ'),'YYYY/MM/DD') AS R_JOB,
    NVL(TO_CHAR(COMM), 'N/A') AS COMM
FROM EMP;

SELECT EMPNO, ENAME, NVL(MGR,0) AS MGR,
    CASE
        WHEN MGR IS NULL THEN 0000
        WHEN SUBSTR(MGR,1,2) = 75 THEN 5555
        WHEN SUBSTR(MGR,1,2) = 76 THEN 6666
        WHEN SUBSTR(MGR,1,2) = 77 THEN 7777
        WHEN SUBSTR(MGR,1,2) = 78 THEN 8888
        ELSE MGR
    END AS CHG_MGR
    FROM EMP;

๐ŸถSCOTT ๊ณ„์ • ๋ฌธ์ œ๐Ÿธ

1. ์˜ค๋Š˜ ๋‚ ์งœ์— ๋Œ€ํ•œ ์ •๋ณด ์กฐํšŒ

SELECT SYSDATE FROM EMP;

2. EMPํ…Œ์ด๋ธ”์—์„œ ์‚ฌ๋ฒˆ, ์‚ฌ์›๋ช…, ๊ธ‰์—ฌ ์กฐํšŒ (๋‹จ, ๊ธ‰์—ฌ๋Š” 100๋‹จ์œ„๊นŒ์ง€์˜ ๊ฐ’๋งŒ ์ถœ๋ ฅ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ธ‰์—ฌ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ)

SELECT EMPNO, ENAME,
    TRUNC(SAL,-2) AS SAL
    FROM EMP
    ORDER BY SAL DESC;

3. EMPํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์›๋ฒˆํ˜ธ๊ฐ€ ํ™€์ˆ˜์ธ ์‚ฌ์›๋“ค์„ ์กฐํšŒ

SELECT *
    FROM EMP
    WHERE MOD(EMPNO,2) = 1;

4. EMPํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์›๋ช…, ์ž…์‚ฌ์ผ ์กฐํšŒ (๋‹จ, ์ž…์‚ฌ์ผ์€ ๋…„๋„์™€ ์›”์„ ๋ถ„๋ฆฌ ์ถ”์ถœํ•ด์„œ ์ถœ๋ ฅ)

SELECT ENAME,
    TO_CHAR(HIREDATE, 'YYYY') AS HIREYEAR,
    TO_CHAR(HIREDATE, 'MM') AS HIREMONTH
    FROM EMP;

5. EMPํ…Œ์ด๋ธ”์—์„œ 9์›”์— ์ž…์‚ฌํ•œ ์ง์›์˜ ์ •๋ณด ์กฐํšŒ

SELECT *
    FROM EMP
    WHERE EXTRACT(MONTH FROM HIREDATE) = 9;

6. EMPํ…Œ์ด๋ธ”์—์„œ 81๋…„๋„์— ์ž…์‚ฌํ•œ ์ง์› ์กฐํšŒ

SELECT *
    FROM EMP
    WHERE EXTRACT(YEAR FROM HIREDATE) = 1981;

7. EMPํ…Œ์ด๋ธ”์—์„œ ์ด๋ฆ„์ด 'E'๋กœ ๋๋‚˜๋Š” ์ง์› ์กฐํšŒ

SELECT *
    FROM EMP
    WHERE ENAME LIKE '%E';

8. EMPํ…Œ์ด๋ธ”์—์„œ ์ด๋ฆ„์˜ ์„ธ๋ฒˆ์งธ ๊ธ€์ž๊ฐ€ 'R'์ธ ์ง์›์˜ ์ •๋ณด ์กฐํšŒ

SELECT *
    FROM EMP
    WHERE ENAME LIKE '__R%';

9. EMPํ…Œ์ด๋ธ”์—์„œ ์‚ฌ๋ฒˆ, ์‚ฌ์›๋ช…, ์ž…์‚ฌ์ผ, ์ž…์‚ฌ์ผ๋กœ๋ถ€ํ„ฐ 40๋…„ ๋˜๋Š” ๋‚ ์งœ ์กฐํšŒ

SELECT EMPNO, ENAME, HIREDATE,
    ADD_MONTHS(HIREDATE, 480) AS "์ž…์‚ฌ์ผ40์ฃผ๋…„"
FROM EMP;

10. EMPํ…Œ์ด๋ธ”์—์„œ ์ž…์‚ฌ์ผ๋กœ๋ถ€ํ„ฐ 38๋…„ ์ด์ƒ ๊ทผ๋ฌดํ•œ ์ง์›์˜ ์ •๋ณด ์กฐํšŒ

SELECT *
    FROM EMP
    WHERE TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) >= 456;

11. ์˜ค๋Š˜ ๋‚ ์งœ์—์„œ ๋…„๋„๋งŒ ์ถ”์ถœ

SELECT TO_CHAR(SYSDATE, 'YYYY')
    FROM DUAL;