2014-05-24 26 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 –