2013-05-17 3 views
29

Ich habe Spalte arr, die vom Typ array ist.Wie eine Auswahl mit Array enthält Wert Klausel in psql

Ich brauche Zeilen zu erhalten, wo arr Spaltenwert s

Diese Abfrage enthält:

SELECT * FROM table WHERE arr @> ARRAY['s'] 

gibt den Fehler:

ERROR: operator does not exist: character varying[] @> text[]

Warum funktioniert es nicht?

P. S. Ich weiß über any() Operator, aber warum funktioniert @> nicht?

Antwort

58

Versuchen

SELECT * FROM table WHERE arr @> ARRAY['s']::varchar[] 
11
SELECT * FROM table WHERE arr && '{s}'::text[]; 

für Rückhaltung zwei Arrays vergleichen.

+0

wirkt wie ein Zauber, danke! –

+0

Bevorzugen Sie die Kürze dieser Syntax. –

15

Beachten Sie, dass dies auch funktionieren kann:

SELECT * FROM table WHERE s=ANY(array) 
+1

Und das hindert mich auch daran, nach varchar zu werfen, wie in 's @> ARRAY ['constant' :: varchar]', kürzer. –