회사에서 검색 조건에 대소문자를 구분하지 않고 검색을 하고 싶다는 요청이 왔는데, 현재 회사에서 사용하는 PostgreSQL에서 지원하는 ILIKE문을 사용하게 되었다.
PostgreSQL에서만 사용가능한 다양한 절이나 함수들이 존재하는 만큼 유용하게 사용할 수 있는 것 같다. 관련 해서는 또 다른 게시물로 작성 해야겠다.
개요
- ILIKE 쿼리 문은
PostgreSQL에서 제공하는 문자열 패턴 일치 쿼리문 - LIKE문과 유사하지만,
대소문자를 구분하지 않는차이점 존재
기본 구문
예제1
1
2
3
SELECT column_name
FROM table_name
WHERE column_name ILIKE pattern;
이 구문에서 column_name은 패턴과 일치하는 문자열을 포함하는 열의 이름이고, pattern은 패턴을 나타내는 문자열이다.
ILIKE 쿼리 문에서 사용할 수 있는 패턴
%: 0개 이상의 문자와 일치_: 단일 문자와 일치 (한행만 반환)[abc]: 문자a,b, 또는c와 일치[^abc]: 문자a,b, 또는c가 아닌 문자와 일치
예제2
1
2
3
SELECT name
FROM customers
WHERE name ILIKE 'a%';
다음 쿼리는 name 열에 a로 시작하는 문자열이 포함된 행을 반환
예제2 결과
name
-------
Alice
Anna
Anthony
예제3
1
2
3
SELECT name
FROM customers
WHERE name ILIKE 'a_';
다음 쿼리는 name 열에 a_로 시작하는 문자열이 포함된 행을 반환 즉, 'a%' LIMIT1 과 결과는 비슷하지만, %를 사용하면 _를 사용할 때보다 더 많은 행을 검색해야 함.
이는 %는 0개 이상의 문자와 일치하기 때문에, _가 포함된 패턴보다 더 많은 행이 % 패턴과 일치할 수 있기 때문임.
예제3 결과
name
-------
Alice
예제4
1
2
3
SELECT name
FROM customers
WHERE name ILIKE '[abc]%';
다음 쿼리는 name 열에 a, b, 또는 c로 시작하는 문자열이 포함된 행을 반환
예제4 결과
name
-------
Alice
Bob
Carol
예제5
1
2
3
SELECT name
FROM customers
WHERE name ILIKE '[^abc]%';
다음 쿼리는 name 열에 a, b, 또는 c로 시작하지 않는 문자열이 포함된 행을 반환
예제5 결과
name
-------
David
Eve
Frank
예제6
1
2
3
SELECT name
FROM customers
WHERE name ILIKE 'a|e%';
다음 쿼리는 name 열에 a 또는 e로 시작하는 문자열이 포함된 행을 반환
예제6 결과
name
-------
Alice
Anthony
Eve
결론
- LIKE 쿼리 문은 데이터베이스에서 문자열을 검색하는 데 유용.
- 대소문자를 구분하지 않고 검색해야 하는 경우 ILIKE 쿼리 문으로 원하는 결과를 얻을 수 있다.