티스토리 뷰

이번에 복잡한 쿼리를 많이 사용해서 mybatis로 개발을 했다.

쿼리를 이것저것 작성을 하다보니 like 문을 or로 묶어서 사용하게 됐는데, like 문 여러 개를 or로 묶다 보니 이걸 묶어서 한꺼번에 쉽게 표현할 수 있는 방법이 없을까 찾아보다가 Similar to라는 것을 알게 되었다.

참고로 이는 다른 DBMS에서 regex 조건을 사용하는 것과 같은 효과를 낸다.

 

 

예를 들어 like 문으로 아래와 같이 '가', '나', '다'로 시작하는 문자를 찾는다고 하자.

그럴 경우 like문으로 쿼리를 작성하면 아래와 같다.

SELECT *
FROM table
WHERE name like '가%' or name like '나%' or name like '다%';

 

 

만일 여기에 다른 조건이 붙거나 '가', '나', '다'까지가 아닌 '라', '마'... 등 or 문으로 똑같은 name에 대한 조건을 붙여야할게 있다면 like 문을 더해서 쿼리가 길어지고 복잡해진다. 이렇게 될 경우 나중에 쿼리를 수정하기도 번거롭고 쿼리를 테스트하기도 번거롭다.

 

하지만 similar to를 사용하면 아래와 같이 조건문을 여러 개의 or 조건이 아닌 하나의 조건으로 끝낼 수 있다.

SELECT *
FROM table
WHERE name similar to '(가|나|다)%'

 

 

조건문을 보면 아래와 같이 similar to 뒤에 정규식을 사용해 그 안에서 or 조건을 수행할 수 있다.

마치 다른 DBMS, 예를 들어 MySql에서 regex라는 것을 사용해 조건을 작성한 것과 같은 효과를 낼 수 있다.

similar to 뒤에 들어가는 정규식은 여느 정규식과 똑같이 작성하면 된다.

...
WHERE name similar to '(가|나|다)%'

 

 

각 DBMS마다 쿼리가 비슷비슷하다고는 하지만 역시 여러 가지 개발 언어처럼 쿼리 작성법 또한 각 DBMS마다 조금씩 차이가 있는 것 같다.

 

 

 

 

🤚 PostgreSql Pattern Matching 공식 문서

https://www.postgresql.org/docs/12/functions-matching.html

 

9.7. Pattern Matching

9.7. Pattern Matching 9.7.1. LIKE 9.7.2. SIMILAR TO Regular Expressions 9.7.3. POSIX Regular Expressions There are three separate approaches to pattern …

www.postgresql.org

 

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함