Rails / Rails3 SQL查询,“LIKE”不适合日期时间?

时间:2011-02-11 15:13:55

标签: sql ruby-on-rails ruby ruby-on-rails-3 activerecord

rails SQL查询是否与日期时间实际兼容?

例如,如果我这样做:

User.where("email LIKE ?", "%.com%")

我希望(并且确实)使用“.com”电子邮件地址返回所有用户的列表。

但是,如果我这样做:

User.where("created_at LIKE ?","%2011%")

我什么都没有回来,尽管我可以看到今年有用户创建。事实上,有时我会得到胡言乱语(例如,我可能得到的东西(似乎没有任何共同点)回到%20%,但没有回到%30%,即使我知道有30个日期的日期),这让我觉得“喜欢”适用于我看不到/不关心的东西(可能是某种ID?)

LIKES仅用于字符串吗?有没有什么方法可以在日期中做类似的东西,在rails中(我确定在mysql中有一些方法可以做到这一点,但是rails也可以处理它吗?)

具体来说,我想在范围内使用它,类似于:

 scope :by_date, lambda {|date| where("created_at LIKE ?",date)}

2 个答案:

答案 0 :(得分:2)

dt = Date.new(2011,1,1)
User.where(['created_at >= ? AND created_at < ?',dt,dt+1.year])

产生

SELECT "users".* FROM "users" WHERE (created_at >= '2011-01-01' AND created_at < '2012-01-01')

这是处理日期时间的更好方法恕我直言

答案 1 :(得分:1)

IIRC,日期时间值存储为整数。 LIKE运算符用于字符串。

您可以尝试使用CONVERT()或CAST()甚至CONCAT()。

类似的东西:

 CONVERT(created_at, VARCHAR(20))