2016-05-12 3 views
0

J'ai essayé de faire la requête suivante fonctionne, mais je ne pouvais pas:de requête Char variant postgres

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

où les rôles, peuvent contenir:

{operations,business_development,sales,customer_service,manager} 

et des rôles est: character varying[]

Je reçois l'erreur:

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

+0

'SELECT * FROM utilisateurs WHERE rôles LIKE '%% des ventes'' - Cela devrait fonctionner, je suppose . –

+0

@Thilo J'ai essayé les deux à coup sûr, ni "ou" ne fonctionne – user181452

+0

vérifier la mise à jour – user181452

Répondre

2

Essayez

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

Ceci étant dit, il est intéressant de noter:

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

fonction 'any' ne peut pas être utilisé comme un argument de gauche que je me souviens – Abelisto

+0

Oups désolé, oui doit être échangé! Merci @Abelisto – e4c5

+0

Merci, je l'ai essayé en fait mais dans le mauvais sens. 'Users.roles = ANY ('ventes')'. Je ne suis pas habitué à cette syntaxe – user181452