2014-05-24 49 views
0

表名:NameYear查找陣列現場實錄在PG

這是我的表

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

現在我想找到記載,MinMaxYear包括1980年

比我該怎麼辦?

我試着這樣說:NameYear.where( 「?min_max_year IN()」,1980年)

,但得到這個錯誤:

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

值的任何記錄先給這樣'NameYear.where( 「min_max_year IN(?)」,[1980])' – Pavan

+0

什麼是類型min_max_year列?它究竟包含什麼? – klin

回答

1

您需要使用ANY條款的陣列列:

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

ActiveRecord的說法應該是:

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

此項選擇min_max_year列中包含的1980年

+0

正在獲取:ActiveRecord :: StatementInvalid:PG :: Error:ERROR:op ANY/ALL(array)需要右側的數組 –

+0

min_max_year的類型究竟是什麼?在你的問題中,你建議它是一個數組,但PG認爲它是別的。你是用一個'int []'定義從表中取出數組,還是手動構造它?在這種情況下,如果你的第一個錯誤是操作符不匹配,那麼你可能會有引用錯誤。 – Patrick

+0

我在我的模型中使用serialize:min_max_year –