REGEXP_LIKE
--<정규 표현식>(Regular Expression : 10g~
--REGEXP_LIKE
--REGEXP_REPLACE
SELECT *
FROM t_reg
--소문자 포함하는 행
--WHERE REGEXP_LIKE(TEXT,'[a-z]');
--대문자 포함하는 행
--WHERE REGEXP_LIKE(TEXT,'[A-Z]');
--대소문자 포함행
--WHERE REGEXP_LIKE(TEXT,'[a-zA-Z]');
--소문자로 시작하고 공백이 있는 행
--WHERE REGEXP_LIKE(TEXT,'[a-z] ');
--abc 123
--abc 123
--소문자와 숫자가 모두 있는 행
--WHERE REGEXP_LIKE(TEXT,'[a-z][0-9]');\\
--a1b2c3
--aabbcc123
--소문자 다음 공백 한개 다음 숫자가 오는 행
--WHERE REGEXP_LIKE(TEXT,'[a-z] [0-9]');
--abc 123
--소문자 다음 공백 두개 다음 숫자가 오는 행
--WHERE REGEXP_LIKE(TEXT,'[a-z] [0-9]');
--abc 123
--공백 있는 모든 행
--WHERE REGEXP_LIKE(TEXT,'[:space:]');
--대문자 오류
--WHERE REGEXP_LIKE(TEXT,'[:SPACE:]');
--소문자 2개 이상
--WHERE REGEXP_LIKE(TEXT,'[a-z][2]');
--소문자 3개 이상
--WHERE REGEXP_LIKE(TEXT,'[a-z][3]');
--숫자가 3개 이상
--WHERE REGEXP_LIKE(TEXT,'[0-9][3]');
--숫자가 4개 이상
--WHERE REGEXP_LIKE(TEXT,'[0-9][4]');
--소문자다음 숫자가 나오는데 각각 2개 이상
--WHERE REGEXP_LIKE(TEXT,'[a-z][0-9][2]');
--aabbcc123
--소문자다음 숫자가 나오는데 각각 3개 이상
--WHERE REGEXP_LIKE(TEXT,'[a-z][0-9][2]');
--소문자나 대문자로 시작하는 것
--WHERE REGEXP_LIKE(TEXT,'^[A-Za-z]');
--숫자나 소문자로 시작
WHERE REGEXP_LIKE(TEXT,'^[0-9a-z]');

SELECT *
FROM t_reg
--소문자로 끝나는 행
--WHERE REGEXP_LIKE(TEXT,'[a-z]$');
--숫자로 끝나는 행
--WHERE REGEXP_LIKE(TEXT,'[0-9]$');
--숫자로 시작하지 않는 행
--WHERE REGEXP_LIKE(TEXT,'^[^0-9]');
--소문자로 시작하지 않는 행
--WHERE REGEXP_LIKE(TEXT,'^[^a-z]');
--소문자로도 숫자로도 시작하지 않는 행
--WHERE REGEXP_LIKE(TEXT,'^[^0-9a-z]');
--소문자로만 구성된 행 제거
--WHERE REGEXP_LIKE(TEXT,'[^a-z]');
--소문자가 포함된 행 모두 제거
--WHERE not REGEXP_LIKE(TEXT,'[a-z]');
--알파벳 포함 모두 제거
--WHERE not REGEXP_LIKE(TEXT,'[a-zA-Z]');
--숫자 하나라도 포함된 행 모두 제거
WHERE not REGEXP_LIKE(TEXT,'[0-9]');
실습문제_2장-29.pdf
SELECT NAME
,TEL
FROM STUDENT
WHERE REGEXP_LIKE(TEL,'^[0-9]{2}\\)[0-9]{4}');
REGEXP_REPLACE
SELECT
--숫자를 *로 변경
--,REGEXP_REPLACE(TEXT,'[[:digit:]]','*')
--공백 1개 이상을 없앰
REGEXP_REPLACE('aaa bb c d','( ){1}','') as "blank"
--aaabbcd
--공백 2개 이상만 제거
,REGEXP_REPLACE('aaa bb c d','( ){2}','') as "blank"
--aaa bbc d
--공백 2개 이상을 없앰
,REGEXP_REPLACE('aaa bb c d','( ){2,}','') as "blank"
--aaa bbcd
--공백 3개 이상을 없앰
,REGEXP_REPLACE('aaa bb c d','( ){3,}','') as "blank
--aaa bb cd"
--공백 1개 이상을 없앰(다 붙음)
,REGEXP_REPLACE('aaa bb c d','( ){1,}','') as "blank"
--aaabbcd
FROM DUAL;

SELECT
-- 변화 없음
REGEXP_REPLACE('aaa bb','( ){2,}','*') AS "BLANK"
-- 공백 2개가 *로 변경
,REGEXP_REPLACE('aaa bb','( ){2,}','*') AS "BLANK"
-- 공백 3개가 *로 변경
,REGEXP_REPLACE('aaa bb','( ){3,}','*') AS "BLANK"
-- 공백 2개가 *로 변경하고 공백 1개 출력
,REGEXP_REPLACE('aaa bb','( ){2}','*') AS "BLANK"
FROM DUAL;

REGEXP_COUNT
--REGEXP_COUNT()특정 문자의 갯수 세는 함수
SELECT TEXT
-- 소문자 a 갯수
,REGEXP_COUNT(TEXT,'a') "C"
-- 소문자 bc 갯수
,REGEXP_COUNT(TEXT,'bc') "C"
-- 12 갯수
,REGEXP_COUNT(TEXT,'12') "C"
,REGEXP_COUNT(TEXT,'c') "C"
-- 자릿수 5부터 c의 갯수
,REGEXP_COUNT(TEXT,'c',5) "C"
-- 자릿수 1부터 c의 갯수
,REGEXP_COUNT(TEXT,'c',1) "C"
-- 대문자 C도 포함해서 세기, i: 대소문자 구별하지 않기
,REGEXP_COUNT(TEXT,'c',1,'i') "C"
-- 모든 문자 갯수
,REGEXP_COUNT(TEXT,'.') "C"
,length(text) "text"
--점의 갯수
,REGEXP_COUNT(TEXT,'\\.') "C"
FROM t_reg;

SELECT TEXT
-- 소문자 aa 갯수, 3개 다 동일
,REGEXP_COUNT(TEXT,'aa') "C"
,REGEXP_COUNT(TEXT,'a{2}') "C"
,REGEXP_COUNT(TEXT,'(a)(a)') "C"