2013-03-13 15 views
9

Gibt es eine Funktion in Postgres wie contains? das kann in der where clause verwendet werden, um zu überprüfen, ob die übergebene Zeichenfolge in der Spalte enthalten ist?Postgresql Enthält in Where-Klausel

+1

Sie meinen 'LIKE '% abc%' in SQL Server? – hims056

+0

ja. Ich bin mir der Verwendung von Like und Ilike bewusst. Es kann jedoch nur statischer Text an like/ilike übergeben werden. Ich muss etwas wie col1 ilike% col2% verwenden. Wobei col1 und col2 Spaltenwerte sind. –

Antwort

7

Es gibt eine Reihe von Möglichkeiten zur Lösung hierfür ist:

  1. Verwenden like, ilike und/oder SIMILAR TO zusammen mit ||. So behandeln Sie Spalten, so etwas wie:

    WHERE col1 ilike '%' || col2 || '%'; 
    
  2. Verwenden Position als NPE Antwort

  3. Sie könnten auch regexp_matches verwenden, aber das ist viel komplexer.

+4

Es ist möglich, auch in diesem Fall 'col1 ~ 'abc'' oder' col1 ~ col2' zu verwenden. – vyegorov

+0

Ich finde, dass die Leistung von ~ ist viel besser als LIKE (YMMV) –

+0

'~' ist eigentlich ein REGEXP. Der Alias ​​von like ist '~~' – mauhiz

16

Sie könnten dafür position() verwenden. Es gibt Null zurück, wenn der Teil nicht gefunden wird:

position(col2 in col1) <> 0