我需要发出可以实现此行为的SQL请求:
SELECT * FROM table WHERE (created_at > '2010/01/01' AND created_at < '2010/12/01') OR (created_at > '2012/01/01' AND created_at < '2012/12/31')
目标是获得一个请求,该请求返回选定年份列表中的结果(可能不是连续的,我们可能有2010年和2012年没有2011年)。
我有什么方法可以实现这一目标?
答案 0 :(得分:1)
你可以在where方法
中尝试一些SQLTable.where(
'created_at between ? and ? or created_at between ? and ?',
date1,
date2,
date3,
date4
)
另外,作为调试这些查询的有用提示。获得查询后,可以调用to_sql查看文字SQL结果。
User.where(admin: true).to_sql
答案 1 :(得分:1)
使用Arel
t = User.arel_table
results = User.where(t[:created_at].gt( '2010-01-01').and(t[:created_at].lt('2010-12-01')).
or(t[:created_at].gt('2012-01-01').and(t[:created_at].lt('2012-12-31'))))
答案 2 :(得分:0)
使用any_of gem:
Table.where.any_of(Table.where(created_at: t1..t2), Table.where(created_at: t3..t4))
t1,t2,t3和t4,是日期。
答案 3 :(得分:0)
我更喜欢使用:
where('created_at > ? AND created_at < ? OR created_at > ? AND created_at < ?', Time.new(2010,1,1), Time.new(2010,12,1), Time.new(2010,1,1), Time.new(2012,1,1), Time.new(2012,12,31))