๊ฐ์ธ๊ณต๋ถ/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