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

115. SQL200์ œ (016~029) ๋ฌธ์žํ•จ์ˆ˜, ๋‚ ์งœ๊ณ„์‚ฐํ•จ์ˆ˜

LEE_BOMB 2022. 2. 1. 18:19

016

SELECT UPPER(ename), LOWER(ename), INITCAP(ename) -- ๋Œ€๋ฌธ์ž๋กœ ์ถœ๋ ฅ/์†Œ๋ฌธ์ž๋กœ ์ถœ๋ ฅ/์ฒซ ๋ฒˆ์งธ ์ฒ ์ž๋งŒ ๋Œ€๋ฌธ์ž๋กœ ์ถœ๋ ฅ
FROM emp;
-- upper์™€ lowerํ•จ์ˆ˜๋Š” ํ…Œ์ด๋ธ” ๋‚ด ํŠน์ • ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ, ๋Œ€/์†Œ๋ฌธ์ž ํ™•์‹คํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ

SELECT ename, sal
FROM emp
WHERE LOWER(ename) = 'scott'; -- SCOTT์ด ์ด๋ฆ„์ด์ง€๋งŒ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜



017

SELECT SUBSTR('SMITH', 1, 3) -- ํŠน์ • ์œ„์น˜์˜ ๋ฌธ์ž์—ด ์ถ”์ถœ (๋ฌธ์ž์—ด/์ฒ ์ž ์‹œ์ž‘ ์œ„์น˜/์œ„์น˜๋กœ๋ถ€ํ„ฐ ๋ช‡๊ฐœ ์ถ”์ถœํ• ์ง€)
FROM dual; -- ๊ฒฐ๊ณผ SMI



018

SELECT ename, LENGTH(ename)
FROM emp; -- ์ด๋ฆ„๊ณผ ์ด๋ฆ„์˜ ์ฒ ์ž ๊ฐœ์ˆ˜ ์ถœ๋ ฅ

SELECT LENGTH('๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ') -- ํ•œ๊ธ€๋„ ๊ฐ€๋Šฅ
FROM dual; -- ๊ฒฐ๊ณผ๊ฐ’ 5

SELECT LENGTHB('๊ฐ€๋‚˜๋‹ค๋ผ๋งˆ') -- ํ•œ๊ธ€๋„ ๊ฐ€๋Šฅ
FROM dual; -- ๊ฒฐ๊ณผ๊ฐ’ 15 (๋ฐ”์ดํŠธ์˜ ๊ธธ์ด ๋ฐ˜ํ™˜. ํ•œ๊ธ€์€ 1์ž์— 3๋ฐ”์ดํŠธ)



019

SELECT INSTR('SMITH', 'M') -- ํŠน์ • ์ฒ ์ž์˜ ์œ„์น˜ ์ถœ๋ ฅ
FROM dual; -- ๊ฒฐ๊ณผ๊ฐ’ 2

SELECT INSTR('abcdefg@naver.com', '@') 
FROM dual; -- ๊ฒฐ๊ณผ๊ฐ’ 8

SELECT SUBSTR('abcdefg@naver.com', INSTR('abcdefg@naver.com', '@')+1) -- substr๋กœ @์˜ ์ž๋ฆฌ ์ˆซ์ž ๋‹ค์Œ ์ฒ ์ž๋ฅผ ์‹œ์ž‘ ์ˆซ์ž๋กœ ์‚ฌ์šฉํ•ด ์ถ”์ถœ
FROM dual; -- ๊ฒฐ๊ณผ๊ฐ’ naver.com

SELECT RTRIM (SUBSTR('abcdefg@naver.com', INSTR('abcdefg@naver.com', '@')+1), '.com') -- naver๋งŒ ์ถ”์ถœ
FROM dual; -- ๊ฒฐ๊ณผ๊ฐ’ naver.com

 

 

020

SELECT ename, REPLACE(sal, 0, '*')
FROM emp; -- 0์„ *๋กœ ๋Œ€์ฒด

SELECT ename, REGEXP_REPLACE(sal, '[0-3]', '*') as SALARY -- ์ •๊ทœ์‹ ํ•จ์ˆ˜
FROM emp; -- ์›”๊ธ‰์˜ ์ˆซ์ž 0~3์„ *๋กœ ์ถœ๋ ฅ

CREATE TABLE TEST_ENAME
(ENAME VARCHAR2(10));

INSERT INTO TEST_ENAME VALUES('๊น€์ธํ˜ธ');
INSERT INTO TEST_ENAME VALUES('์•ˆ์ƒ์ˆ˜');
INSERT INTO TEST_ENAME VALUES('์ตœ์˜ํฌ');

SELECT REPLACE(ename, SUBSTR (ename, 2, 1), '*') as "์ „๊ด‘ํŒ_์ด๋ฆ„"
FROM test_ename; -- ๊น€*ํ˜ธ, ์•ˆ*์ˆ˜, ์ตœ*ํฌ



021

SELECT ename, LPAD(sal, 10, '*') as salary1, RPAD(sal, 10, '*') as salary2 -- ์™ผ์ชฝ์œผ๋กœ ์ฑ„์›Œ๋„ฃ๋‹ค/์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ฑ„์›Œ๋„ฃ๋‹ค
FROM emp;

SELECT ename, sal, lpad('โ– ', round(sal/100) ,'โ– ') as bar_chart
FROM emp;

 

 

022

SELECT 'smith', LTRIM('smith', 's'), RTRIM('smith', 'h'), TRIM('s' from 'smiths') -- ์™ผ์ชฝ ์ฒ ์ž ์ž˜๋ผ์„œ/์˜ค๋ฅธ์ชฝ ์ฒ ์ž ์ž˜๋ผ์„œ/์–‘์ชฝ ์ฒ ์ž ์ž˜๋ผ์„œ ์ถœ๋ ฅ
FROM dual; -- smith, mith, smit, mith

insert into emp(empno,ename,sal,job,deptno) values(8291, 'JACK  ', 3000, 'SALESMAN', 30); -- jack์ด๋ฆ„ ๋’ค ๊ณต๋ฐฑ ์กด์žฌ
commit;

SELECT ename, sal
FROM emp
WHERE ename='JACK'; -- ์ถœ๋ ฅ ๊ฒฐ๊ณผ ์—†์Œ

SELECT ename, sal
FROM emp
WHERE RTRIM(ename)='JACK'; -- ์˜ค๋ฅธ์ชฝ ๊ณต๋ฐฑ ์ œ๊ฑฐํ•˜์—ฌ ์ถœ๋ ฅ๋จ

DELETE FROM EMP WHERE TRIM(ENAME)='JACK';
COMMIT;



023

SELECT '876.567' as ์ˆซ์ž, ROUND(876.567,1) -- ์†Œ์ˆ˜์ ์„ 0์‚ผ์•„, ๋‘ ๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ
FROM dual; -- 876.6

SELECT '876.567' as ์ˆซ์ž, ROUND(876.567,-1) -- ์†Œ์ˆ˜์ ์„ 0์‚ผ์•„, ์†Œ์ˆ˜์  ์ด์ „ ์ผ์˜ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ
FROM dual; -- 880



024

SELECT '876.567', TRUNC(876.567,1) -- ์†Œ์ˆ˜์ ์„ 0์‚ผ์•„, ๋‘ ๋ฒˆ์งธ ์ž๋ฆฌ๋ถ€ํ„ฐ ๋ฒ„๋ฆฌ๊ณ  ์ถœ๋ ฅ
FROM dual; -- 876.5

SELECT '876.567', TRUNC(876.567,-1) -- ์†Œ์ˆ˜์ ์„ 0์‚ผ์•„, ์†Œ์ˆ˜์  ์ด์ „ ์ผ์˜ ์ž๋ฆฌ์—์„œ ๋ฒ„๋ฆฌ๊ณ  ์ถœ๋ ฅ
FROM dual; -- 870



025

SELECT MOD(10,3) -- 10์„ 3์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’
FROM DUAL; -- 1 

SELECT empno, MOD(empno,2)
FROM emp; -- ์‚ฌ์›๋ฒˆํ˜ธ๊ฐ€ ํ™€์ˆ˜๋ฉด1, ์ง์ˆ˜๋ฉด 0 ์ถœ๋ ฅ

SELECT empno, ename 
FROM emp
WHERE MOD(empno,2) = 0; -- ์‚ฌ์›๋ฒˆํ˜ธ๊ฐ€ ์ง์ˆ˜์ธ ์‚ฌ๋žŒ๋“ค ์ถœ๋ ฅ

SELECT FLOOR(10/3) -- 10์„ 3์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์€ 3.333.. FLOOR๋Š” 3๊ณผ 4์‚ฌ์ด์˜ ๊ฐ€์žฅ ๋ฐ”๋‹ฅ๊ฐ’ ์ถœ๋ ฅ
FROM dual; --3



026

SELECT ename, MONTHS_BETWEEN(sysdate,hiredate) -- ๊ทœ์น™! MONTHS_BETWEEN(์ตœ์‹ ๋‚ ์งœ, ์˜ˆ์ „๋‚ ์งœ) sysdate๋Š” ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
FROM emp; 

SELECT TO_DATE('2019-06-01','RRRR-MM-DD') - TO_DATE('2018-10-01','RRRR-MM-DD') -- TO_DATE๋Š” ์—ฐ๋„/๋‹ฌ/์ผ ๋ช…์‹œ
FROM dual; --243

SELECT ROUND((TO_DATE('2019-06-01','RRRR-MM-DD') - TO_DATE('2018-10-01','RRRR-MM-DD')) / 7 )  AS "์ด ์ฃผ์ˆ˜"
FROM dual; -- 35
 
SELECT MONTHS_BETWEEN('2018-10-01', '2019-06-01') as "๊ฐœ์›” ์ˆ˜" -- ๊ฐœ์›” ์ˆ˜ ๊ณ„์‚ฐ. month๋Š” 30 ํ˜น์€ 31๋กœ ๋‚˜๋ˆ„์–ด์•ผํ•˜๋ฏ€๋กœ MONTHS_BETWEEN ์‚ฌ์šฉ
FROM dual; -- 8



027

SELECT ADD_MONTHS(TO_DATE('2019-05-01','RRRR-MM-DD') , 100) -- 2019๋…„ 5์›” 1์ผ๋กœ๋ถ€ํ„ฐ 100๋‹ฌ ๋’ค์˜ ๋‚ ์งœ
FROM dual;  -- 27/09/01

SELECT TO_DATE('2019-05-01','RRRR-MM-DD') + 100 -- 2019๋…„ 5์›” 1์ผ๋ถ€ํ„ฐ 100์ผ ํ›„์˜ ๋‚ ์งœ
FROM dual; -- 19/08/09

SELECT TO_DATE('2019-05-01','RRRR-MM-DD') + interval '100' month -- 19๋…„ 5์›” 1์ผ๋ถ€ํ„ฐ 100๋‹ฌ ๋’ค์˜ ๋‚ ์งœ
FROM dual; -- 27/09/01

SELECT TO_DATE('2019-05-01','RRRR-MM-DD') + interval '1-3' year(1) to month -- 19๋…„ 5์›” 1์ผ๋ถ€ํ„ฐ 1๋…„ 3๊ฐœ์›” ํ›„์˜ ๋‚ ์งœ ์ถœ๋ ฅ
FROM dual; -- 20/08/01
  
SELECT TO_DATE('2019-05-01','RRRR-MM-DD') + interval '3' year -- 19๋…„ 5์›” 1์ผ๋ถ€ํ„ฐ 3๋…„ ํ›„์˜ ๋‚ ์งœ ๋ฐ˜ํ™˜
FROM dual; --22/05/01

SELECT TO_DATE('2019-05-01','RRRR-MM-DD') + TO_YMINTERVAL('03-05') as ๋‚ ์งœ -- 19๋…„ 5์›” 1์ผ๋ถ€ํ„ฐ 3๋…„ 5๊ฐœ์›” ํ›„์˜ ๋‚ ์งœ ์ถœ๋ ฅ
FROM dual; -- 22/10/01

 

INTERVAL '1' YEAR 1๋…„ ๋”ํ•˜๊ธฐ
INTERVAL '1' MONTH 1๊ฐœ์›” ๋”ํ•˜๊ธฐ
INTERVAL '1-1' YEAR TO MONTH 1๋…„ 1๊ฐœ์›” ๋”ํ•˜๊ธฐ
INTERVAL '1' DAY 1์ผ ๋”ํ•˜๊ธฐ
INTERVAL '1' HOUR 1์‹œ๊ฐ„ ๋”ํ•˜๊ธฐ
INTERVAL '03:30' HOUR TO MINUTE 3์‹œ๊ฐ„30๋ถ„ ๋”ํ•˜๊ธฐ
INTERVAL '1' MINUTE 1๋ถ„ ๋”ํ•˜๊ธฐ
INTERVAL '1' SECOND 1์ดˆ ๋”ํ•˜๊ธฐ
INTERVAL '10:30' MINUTE TO SECOND 10๋ถ„30์ดˆ ๋”ํ•˜๊ธฐ

* ์‹œ๊ฐ„๊ณผ ๋ถ„ / ๋ถ„๊ณผ ์ดˆ๋Š” : ๊ตฌ๋ถ„์ž, ์—ฐ๋„์™€ ๊ฐœ์›”์€ - ๊ตฌ๋ถ„์ž

 

 

028

SELECT '2019/05/22' as ๋‚ ์งœ, NEXT_DAY('2019/05/22', '์›”์š”์ผ') -- 19๋…„ 5์›” 22์ผ๋ถ€ํ„ฐ ๋ฐ”๋กœ ๋Œ์•„์˜ฌ ์›”์š”์ผ์˜ ๋‚ ์งœ
FROM dual; -- 19/05/27
  
SELECT SYSDATE as ์˜ค๋Š˜๋‚ ์งœ -- ์˜ค๋Š˜ ๋‚ ์งœ ์ถœ๋ ฅ
FROM dual; 

SELECT NEXT_DAY(SYSDATE, 'ํ™”์š”์ผ') as "๋‹ค์Œ ๋‚ ์งœ" -- ์˜ค๋Š˜๋ถ€ํ„ฐ ์•ž์œผ๋กœ ๋Œ์•„์˜ฌ ํ™”์š”์ผ ๋‚ ์งœ ์ถœ๋ ฅ
FROM dual; 

SELECT NEXT_DAY(ADD_MONTHS('2019/05/22',100), 'ํ™”์š”์ผ') as  "๋‹ค์Œ ๋‚ ์งœ" -- ์˜ค๋Š˜๋ถ€ํ„ฐ 100๋‹ฌ ๋’ค์— ๋Œ์•„์˜ค๋Š” ํ™”์š”์ผ ๋‚ ์งœ ์ถœ๋ ฅ
FROM dual; 
  
SELECT NEXT_DAY(ADD_MONTHS(sysdate,100), '์›”์š”์ผ') as "๋‹ค์Œ ๋‚ ์งœ" -- ์˜ค๋Š˜๋ถ€ํ„ฐ 100๋‹ฌ ๋’ค์— ๋Œ์•„์˜ค๋Š” ์›”์š”์ผ ๋‚ ์งœ ์ถœ๋ ฅ
FROM dual;


  
029

SELECT '2019/05/22' as ๋‚ ์งœ, LAST_DAY('2019/05/22') as "๋งˆ์ง€๋ง‰ ๋‚ ์งœ" -- 19๋…„ 5์›” 22์ผ ํ•ด๋‹น ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์งœ
FROM dual; -- 19/05/31
  
SELECT LAST_DAY(SYSDATE) - SYSDATE as ๋‚จ์€๋‚ ์งœ -- ์˜ค๋Š˜๋ถ€ํ„ฐ ์ด๋ฒˆ ๋‹ฌ ๋ง์ผ๊นŒ์ง€ ๋‚จ์€ ์ผ์ˆ˜
FROM dual;
  
SELECT ename, hiredate, LAST_DAY(hiredate) -- ์ž…์‚ฌํ•œ ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์งœ ์ถœ๋ ฅ
FROM emp
WHERE ename = 'KING'; -- 81/11/30

 

 

 

 

์ฐธ๊ณ 

interval ํ•จ์ˆ˜ ์ดํ•ด https://cross-the-line.tistory.com/4