2013-03-13 10 views
9

Czy jest funkcja w postgres takich jak contains? który może być użyty w where clause do sprawdzenia, czy przekazany ciąg jest zawarty w kolumnie?Postgresql Zawiera w gdzie klauzula

+1

Masz na myśli 'LIKE '% abc%'' w SQL Server? – hims056

+0

tak. Zdaję sobie sprawę z tego, że używam i tak. Ale tylko tekst statyczny może zostać przekazany jako like/ilike. muszę użyć czegoś takiego jak col1 ilike% col2%. Gdzie col1 i col2 są wartościami kolumn. –

Odpowiedz

7

Istnieje kilka sposobów rozwiązania tego:

  1. Zastosowanie like, ilike i/lub SIMILAR TO wraz z ||. Aby obsłużyć kolumny, coś jak:

    WHERE col1 ilike '%' || col2 || '%'; 
    
  2. Wykorzystanie pozycji jak NPE za odpowiedź

  3. Można również użyć regexp_matches ale to jest bardziej skomplikowane.

+4

W tym przypadku możliwe jest użycie 'col1 ~ 'abc'' lub' col1 ~ col2'. – vyegorov

+0

Uważam, że wydajność ~ jest znacznie lepsza niż LIKE (YMMV) –

+0

'~' jest w rzeczywistości REGEXP. Alias ​​podobny to "~~" – mauhiz

16

Do tego można użyć position(). Zwraca zero gdy podciąg nie zostanie znaleziony:

position(col2 in col1) <> 0