복붙노트

[SQL] PostgreSQL은 단어의 목록 중 어떤 LIKE 와일드 카드를

SQL

PostgreSQL은 단어의 목록 중 어떤 LIKE 와일드 카드를

나는 ~ 25 개 단어의 간단한 목록을 가지고있다. 내가 PostgreSQL의에서 VARCHAR 필드가,하자 해당 목록은 [ 'foo는', '바', '바즈'] 말한다. 나는 그 단어 중 하나가 내 테이블의 모든 행을 찾고 싶어요. 이것은 작동하지만 좀 더 우아하고 뭔가를하고 싶습니다.

select *
from table
where (lower(value) like '%foo%' or lower(value) like '%bar%' or lower(value) like '%baz%')

해결법

  1. ==============================

    1.당신은 즉 교대를 지원하는 포스트 그레스 'SIMILAR TO 연산자를 사용할 수 있습니다

    당신은 즉 교대를 지원하는 포스트 그레스 'SIMILAR TO 연산자를 사용할 수 있습니다

    select * from table where lower(value) similar to '%(foo|bar|baz)%';
    
  2. ==============================

    2.PostgreSQL은 또한 전체 POSIX 정규 표현식을 지원합니다 :

    PostgreSQL은 또한 전체 POSIX 정규 표현식을 지원합니다 :

    select * from table where value ~* 'foo|bar|baz';
    

    ~ * ~ 대소 문자를 구분, 소문자를 구분하지 일치합니다.

    또 다른 옵션은 사용하는 것입니다 :

    select * from table where value  like any (array['%foo%', '%bar%', '%baz%']);
    select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
    

    당신은 어떤 어떤 운영자 수익률이 부울을 사용할 수 있습니다. 나는 정규식 옵션이 더 빠를 것이라고 생각하지만, 어떤 당신의 도구 상자에있는 유용한 도구이다.

  3. ==============================

    3.사실 PostgreSQL의에 해당하는 연산자가있다 :

    사실 PostgreSQL의에 해당하는 연산자가있다 :

    SELECT *
    FROM table
    WHERE lower(value) ~~ ANY('{%foo%,%bar%,%baz%}');
    
  4. ==============================

    4.http://www.postgresql.org/docs/9.0/interactive/textsearch.html : 하나의 '우아한'솔루션은 전체 텍스트 검색을 사용하는 것입니다. 그런 다음 전체 텍스트 검색 쿼리를 사용합니다.

    http://www.postgresql.org/docs/9.0/interactive/textsearch.html : 하나의 '우아한'솔루션은 전체 텍스트 검색을 사용하는 것입니다. 그런 다음 전체 텍스트 검색 쿼리를 사용합니다.

  5. from https://stackoverflow.com/questions/4928054/postgresql-wildcard-like-for-any-of-a-list-of-words by cc-by-sa and MIT license