LENGTH(SMITH) → 5
LENGTHB('자두') → 6 (바이트 수니까)
INSTR('ORACLE ORAHOME BIORA', 'ORA', 1, 2) → 8
: 인덱스 1에서부터 2번째 등장하는 ORA를 찾는다.
REVERSE('ORACLE') → ELCARO
SELECT USER
FROM DUAL;
--===>>SCOTT
-- ○ TBL_SAWON 테이블에서 성별이 남성인 사원만
-- 사원번호, 사원명, 주민번호 , 급여 항목을 조회한다.
-- 단, SUBSTR() 함수를 사용할 수 있도록 하며.
-- 급여 기준으로 내림차순 정렬을 수행할 수 있도록 한다.
SELECT 사원번호, 사원명, 주민번호, 급여
FROM TBL_SAWON
WHERE 성별이 남성(주민번호 7번째 자리 1개가 1 OR 3)
ORDER BY 급여 내림차순;
SELECT SANO, SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SUBSTR(JUBUN,7,1) = '1' -- 오라클에서 자동형변환을 절대 믿지 마라. 그냥 1 X
OR SUBSTR(JUBUN,7,1) = '3' -- 오라클에서 자동형변환을 절대 믿지 마라.
ORDER BY SAL DESC;
/*
1009 정준이 9804251234567 4000
1011 선동열 7505071234567 3000
1016 남이 7012121234567 2000
1014 남주혁 0203043234567 2000
1015 남궁선 0512123234567 1000*/
SELECT SANO, SANAME, JUBUN, SAL
FROM TBL_SAWON
WHERE SUBSTR(JUBUN,7,1) IN ('1', '3')
ORDER BY SAL DESC;
-- ● LENGTH()/ LENGTHB()
SELECT LENGTHB('자두')
FROM DUAL;
--==>> 6
SELECT ENAME "1"
, LENGTH(ENAME) "2"
, LENGTHB(ENAME) "3"
FROM TBL_EMP;
/*
SMITH 5 5
ALLEN 5 5
WARD 4 4
JONES 5 5
MARTIN 6 6
BLAKE 5 5
CLARK 5 5
SCOTT 5 5
KING 4 4
TURNER 6 6
ADAMS 5 5
JAMES 5 5
FORD 4 4
MILLER 6 6*/
-->LENGTH()는 글자 수를 반환, LENGTHB()는 바이트 수를 반환
-- ※ 한글 데이터를 처리할 경우 바이트기반으로
-- 처리해야만 하는 상황이라면 항상 인코딩 방식을 잘 체크하고 사용해야 한다,
--● INSTR()
SELECT 'ORCLE ORAHOME BIORA' "1"
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 1, 1) "2"
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 1, 2) "3"
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 2, 1) "4"
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 2) "5"
, INSTR('ORACLE ORAHOME BIORA', 'ORA', 2, 2) ""
FROM DUAL;
--==>> ORCLE ORAHOME BIORA 1 8 8 8 18
-- 첫 번째 파라미터 값에 해당하는 문자열에서,,,(대상 문자열)
-- 두 번째 파라미터 값을 통해 넘겨준 문자열이 등장하는 위치를 찾아가
-- 세 번째 파라미터 값은 찾기 시작하는,,, ( 즉, 스캔을 시작하는 ) 위치
-- 네 번째 파라미터 값은 몇 번째 등장하는 값을 찾을 것인지에 대한 설정(1은 생략 가능)
SELECT '나의오라클 집으로오라 합니다' "1"
, INSTR('나의오라클 집으로오라 합니다', '오라', 1) "2"
, INSTR('나의오라클 집으로오라 합니다', '오라', 2) "3"
, INSTR('나의오라클 집으로오라 합니다', '오라', 10) "4"
, INSTR('나의오라클 집으로오라 합니다', '오라', 11) "5"
FROM DUAL;
--> 마지막 파라미터 ( 네 번째 파라미터) 값을 생략한 형태로 사용!! → 1
--==>> 나의오라클 집으로오라 합니다 3 3 10 0
-- ● REVERSE() ---- 대상 문자열 (매개변수)을 거꾸로 반환한다.(단, 한글은 제외)
SELECT 'ORACLE' "1"
, REVERSE('ORACLE') "2"
, REVERSE('오라클') "3"
FROM DUAL;
--==>>ORACLE ELCARO ���
--● 실습 대상 테이블 생성(TBL_FILES)
CREATE TABLE TBL_FILES
( FILENO NUMBER(3)
, FILENAME VARCHAR2(100)
);
--==>>Table TBL_FILES이(가) 생성되었습니다.
--● 실습 데이터 입력
INSERT INTO TBL_FILES VALUES (1, 'C:\AAA\BBB\CCC\SALES.DOC');
INSERT INTO TBL_FILES VALUES (2, 'C:\AAA\PANMAE.XXLS');
INSERT INTO TBL_FILES VALUES (3, 'D:\RESEARCH.PPT');
INSERT INTO TBL_FILES VALUES (4, 'C:\DOCUMENTS\STUDY.HWP');
INSERT INTO TBL_FILES VALUES (5, 'C:\DOCUMENTS\TEMP\SQL.TXT');
INSERT INTO TBL_FILES VALUES (6, 'D:\SHARE\F\TEST.PNG');
INSERT INTO TBL_FILES VALUES (7, 'C:\USER\GUILDONG\PICTURE\PHOTO\SPRING.JPG');
INSERT INTO TBL_FILES VALUES (8, 'C:\ORABLESTUDY\20210329_01_SCOTT.SQL');
--==>> 1 행 이(가) 삽입되었습니다. * 8
SELECT *
FROM TBL_FILES;
/*
1 C:\AAA\BBB\CCC\SALES.DOC
2 C:\AAA\PANMAE.XXLS
3 D:\RESEARCH.PPT
4 C:\DOCUMENTS\STUDY.HWP
5 C:\DOCUMENTS\TEMP\SQL.TXT
6 D:\SHARE\F\TEST.PNG
7 C:\USER\GUILDONG\PICTURE\PHOTO\SPRING.JPG
8 C:\ORABLESTUDY\20210329_01_SCOTT.SQLL*/
-- ● 커밋
COMMIT;
--==>>>커밋 완료.
SELECT FILENO "파일번호", FILENAME "파일명"
FROM TBL_FILES;
/*
파일번호 파일명
--- ----------------------------------
1 C:\AAA\BBB\CCC\SALES.DOC
2 C:\AAA\PANMAE.XXLS
3 D:\RESEARCH.PPT
4 C:\DOCUMENTS\STUDY.HWP
5 C:\DOCUMENTS\TEMP\SQL.TXT
6 D:\SHARE\F\TEST.PNG
7 C:\USER\GUILDONG\PICTURE\PHOTO\SPRING.JPG
8 C:\ORABLESTUDY\20210329_01_SCOTT.SQL*/
▼ 문자열에서 마지막으로 등장하는 ' \ ' 찾기
/*
파일번호 파일명
--- ----------------------------------
1 C:\AAA\BBB\CCC\SALES.DOC
2 C:\AAA\PANMAE.XXLS
3 D:\RESEARCH.PPT
4 C:\DOCUMENTS\STUDY.HWP
5 C:\DOCUMENTS\TEMP\SQL.TXT
6 D:\SHARE\F\TEST.PNG
7 C:\USER\GUILDONG\PICTURE\PHOTO\SPRING.JPG
8 C:\ORABLESTUDY\20210329_01_SCOTT.SQL*/
-- ● TBL_ FILES 테이블을 대상으로 파일명.확장자 가 조회될 수 있도록
--쿼리문을 구성한다.
--SUBSTRING(파일명, 마지막\위치+1, 끝까지)
SELECT INSTR(REVERSE('C:\AAA\BBB\CCC\SALES.DOC'),'\',1)
FROM DUAL; --==>> 10
SELECT LENGTH('C:\AAA\BBB\CCC\SALES.DOC')
FROM DUAL; --==>>24
-- /의 위치는 15, 즉 24-10+1 에 위치하고 있다.
SELECT SUBSTR('C:\AAA\BBB\CCC\SALES.DOC'
,LENGTH('C:\AAA\BBB\CCC\SALES.DOC')-INSTR(REVERSE('C:\AAA\BBB\CCC\SALES.DOC'),'\',1)+2
)
FROM DUAL;
--==>>> SALES.DOC
SELECT FILENO "파일번호" , SUBSTR(FILENAME
,LENGTH(FILENAME)-INSTR(REVERSE(FILENAME),'\',1)+2
) "파일명"
FROM TBL_FILES;
/*
파일번호 파일명
-- ----------------
1 SALES.DOC
2 PANMAE.XXLS
3 RESEARCH.PPT
4 STUDY.HWP
5 SQL.TXT
6 TEST.PNG
7 SPRING.JPG
8 20210329_01_SCOTT.SQL*/
▼ 또 다른 풀이
SELECT SUBSTR(REVERSE(FILENAME), 1, INSTR(REVERSE(FILENAME), '\',1)-1)
FROM TBL_FILES;
/*
COD.SELAS
SLXX.EAMNAP
TPP.HCRAESER
PWH.YDUTS
TXT.LQS
GNP.TSET
GPJ.GNIRPS
LQS.TTOCS_10_92301202*/
SELECT REVERSE(SUBSTR(REVERSE(FILENAME), 1, INSTR(REVERSE(FILENAME), '\',1)-1))
FROM TBL_FILES;
/*
SALES.DOC
PANMAE.XXLS
RESEARCH.PPT
STUDY.HWP
SQL.TXT
TEST.PNG
SPRING.JPG
20210329_01_SCOTT.SQL*/