2016-05-12 14 views
0

Ich habe versucht, die folgende Abfrage funktioniert zu machen, aber ich kann es nicht:Abfrage Char unterschiedliche Postgres

SELECT "users".* FROM "users" WHERE (users.roles LIKE "%sales%") 
or 
    SELECT "users".* FROM "users" WHERE (users.roles LIKE '%sales%') 

wo Rollen können enthalten:

{operations,business_development,sales,customer_service,manager} 

und Rollen sind: character varying[]

ich erhalte die Fehlermeldung:

ERROR: operator does not exist: character varying[] ~~ unknown LINE 1: select users.id from users where users.roles LIKE '%sales%'...

+0

SELECT * FROM users WHERE Rollen LIKE '% Umsatz%' '- Das sollte funktionieren, ich denke, . –

+0

@Thilo Ich versuchte beide sicher, weder "oder" funktioniert – user181452

+0

überprüfen Sie das Update – user181452

Antwort

2

Versuchen

SELECT "users".* FROM "users" WHERE 'sales' = ANY(users.roles) 

Having said that, es ist bemerkenswert:

Tip: Arrays are not sets; searching for specific array elements can be a sign of database misdesign. Consider using a separate table with a row for each item that would be an array element. This will be easier to search, and is likely to scale better for a large number of elements.

http://www.postgresql.org/docs/9.5/static/arrays.html

+1

'any' Funktion kann nicht als ein linkes Argument verwendet werden, wie ich mich erinnere. – Abelisto

+0

Ups @Abelisto – e4c5

+0

Danke! Ich habe es tatsächlich aber falsch versucht. 'Users.roles = ANY ('sales')'. Ich bin nicht an diese Syntax gewöhnt – user181452