LIKE 대신에 REGEXP_LIKE() 를 사용하면 코딩하는 양을 줄일 수 있다.

LIKE 사용법>
[컬럼] LIKE '%찾는문자%'
[컬럼] NOT LIKE '%찾는문자%'

특정 컬럼에서 ABC, 가나다, 123이 들어가 있는지를 확인할 때
LIKE 사용한다면
AND [컬럼] LIKE '%ABC%'
AND [컬럼] LIKE '%가나다%'
AND [컬럼] LIKE '%123%'


REGEXP_LIKE() 사용법>
# IN과 같은 효과를 볼 수 있음 - 이건 꼭 필요하다기 보다 편리하다. 하긴 다른것도 꼭 필요하다기 보다 코딩 양을 줄일 수 있는게 핵심이긴하다.
REGEXP_LIKE([컬럼], '찾는문자1|찾는문자2|찾는문자3|...');
NOT REGEXP_LIKE([컬럼], '찾는문자1|찾는문자2|찾는문자3|...');


특정 컬럼에서 ABC, 가나다, 123이 들어가 있는지를 확인할 때
REGEXP_LIKE 사용한다면
AND REGEXP_LIKE([컬럼], 'ABC|가나다|123');


퀴즈>
유저의 모든 테이블에서 DATE가 들어가 있는 컬럼을 찾는데 마지막이 숫자로 들어가는 백업테이블(예를 들어 MY_TABLE_2019)은 제외한다.


힌트>
-- 숫자로 끝나는 내용 찾기
REGEXP_LIKE([컬럼], '[0-9]$');

-- 숫자로 끝나지 않는 내용 찾기
NOT REGEXP_LIKE([컬럼], '[0-9]$');


답>
SELECT
T.TABLE_NAME
, C.COLUMN_NAME
FROM
USER_TABLES T
, USER_TAB_COLUMNS C
WHERE T.TABLE_NAME = C.TABLE_NAME
AND C.COLUMN_NAME LIKE '%DATE%'
AND NOT REGEXP_LIKE(T.TABLE_NAME, '[0-9]$');


참고>
https://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions018.htm


정규식 관련 글

[Oracle] split 특수문자로 구분하기 - REGEXP_SUBSTR, 정규식, INSTR, SUBSTR

 

 

728x90

+ Recent posts