2014-05-24 3 views
0

TableName: NameYearRechercher un enregistrement de tableau Champ PG

Ceci est ma table

ID name min_max_year 
1 xyz [1970,1971...2014] 
2 abc [1980,1981...2014] 
2 pqr [2000,2001...2014] 

Maintenant, je veux trouver des documents qui MinMaxYear comprennent 1980.

Que Comment puis-je faire?

J'essaie de cette façon: NameYear.where ("? Min_max_year IN()", 1980)

mais obtenir cette erreur:

ActiveRecord::StatementInvalid: PG::Error: ERROR: operator does not exist: text = integer 
LINE 1: ...ROM "name_year" WHERE (min_max_year IN (1980)) 
+0

Essayez de donner comme ceci 'NameYear.where ("min_max_year IN (?)", [1980])' – Pavan

+0

Qu'est-ce qu'un type de colonne min_max_year? Que contient-il exactement? – klin

Répondre

1

Vous devez utiliser la clause ANY sur la colonne de tableau :

SELECT * FROM NameYear 
WHERE 1980 = ANY(min_max_year); 

La déclaration ActiveRecord serait:

NameYear.where("? = ANY(min_max_year)", 1980) 

Ce sélectionne tout document dont min_max_year colonne contient une valeur de 1980.

+0

Obtention: ActiveRecord :: StatementInvalid: PG :: Erreur: ERREUR: op ANY/ALL (tableau) nécessite un tableau sur le côté droit –

+0

Quel est exactement le type de min_max_year? Dans votre question, vous suggérez que c'est un tableau, mais PG pense que c'est quelque chose d'autre. Retirez-vous le tableau d'une table avec une définition 'int []', ou le construisez-vous manuellement, auquel cas vous avez probablement tort de voir que votre première erreur est une incompatibilité d'opérateur. – Patrick

+0

Je prends sérialisation: min_max_year dans mon modèle –

Questions connexes