작성일자 : 2023-10-27
Ver 0.1.1
0. Intro
일반적으로 SQL에서 여러개의 단어를 LIKE로 검색하기 위해서는 동적 쿼리를 사용하거나 LIKE, OR, IN을 사용했다.
Oracle 10g 버전부터 정규식 함수가 추가되었고, 그 중에서 REGEXP_LIKE 함수를 사용하여 다중 검색을 쉽게 할 수 있게 되었다.
1. How to
검색할 복수개의 단어를 파이프(|)로 연결하여 하나의 문자열로 나열 시킨 후 사용하면 된다.
대,소문자 구분없이 조회하고 싶다면 세번째 인자에 옵션으로 'i'를 추가하면 된다.
WITH TEMP AS (
SELECT 'Manchester City' TEXT FROM dual union all
SELECT 'Manchester United' TEXT FROM dual union all
SELECT 'Tottenham' TEXT FROM dual union all
SELECT 'Arsenal' TEXT FROM dual union all
SELECT 'Liverpool' TEXT FROM dual union all
SELECT 'Aston Villa' TEXT FROM dual union all
SELECT 'Newcastle' TEXT FROM dual union all
SELECT 'Chelsea' TEXT FROM dual union all
SELECT 'Wolves' TEXT FROM dual
)
SELECT *
FROM TEMP
WHERE REGEXP_LIKE(TEXT, 'Manchester|A|N')
(output)
# | TEXT |
1 | Manchester City |
2 | Manchester United |
3 | Arsenal |
4 | Aston Villa |
5 | New Castle |
'i'를 넣은 경우 (대소문자 구분 X)
WITH TEMP AS (
SELECT 'Manchester City' TEXT FROM dual union all
SELECT 'Manchester United' TEXT FROM dual union all
SELECT 'Tottenham' TEXT FROM dual union all
SELECT 'Arsenal' TEXT FROM dual union all
SELECT 'Liverpool' TEXT FROM dual union all
SELECT 'Aston Villa' TEXT FROM dual union all
SELECT 'Newcastle' TEXT FROM dual union all
SELECT 'Chelsea' TEXT FROM dual union all
SELECT 'Wolves' TEXT FROM dual
)
SELECT *
FROM TEMP
WHERE REGEXP_LIKE(TEXT, 'manchester|a|n', 'i')
(output)
# | TEXT |
1 | Manchester City |
2 | Manchester United |
3 | Tottenham |
4 | Arsenal |
5 | Aston Villa |
6 | Newcastle |
7 | Chelsea |
정규식은 Tableau에서도 지원하는 함수가 있다.
정규식 자체가 상대적으로 익숙하지는 않지만, 적응이 되면 SQL에서나 Tableau에서도 유용하게 사용할 수 있지 않을까 생각된다.