2011-02-11 113 views
1

rails SQL查詢是否與日期時間實際兼容?Rails/Rails3 SQL查詢,「LIKE」不適用於日期時間?

例如,如果我這樣做:

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

我期望(做)取回所有用戶的列表,以「.COM」的電子郵件地址。

但是,如果我這樣做:

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

我回去沒事,即使我可以看到,有網友今年創建的。事實上,有時候我會收到亂碼(例如,我可能會把一些東西(看起來沒有什麼共同點)返回給%20%,但是沒有什麼能夠返回到%30%,即使我知道他們中有30個日期),這讓我覺得「LIKE」適用於我沒有看到/關心的東西(也許某種形式的ID)

僅僅是LIKES字符串?有什麼辦法可以在日期時間,軌道上做類似的事情(我敢肯定有一些方法可以在MySQL中完成,但軌道也可以處理它嗎?)

具體來說,我想在一個範圍,類似於:

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

回答

1

IIRC,日期時間值存儲爲整數。 LIKE運算符處理字符串。

您可以嘗試使用CONVERT()或CAST()或甚至CONCAT()。

喜歡的東西:

CONVERT(created_at, VARCHAR(20)) 
+1

忘了補充,用於比較日期時間最好是BETWEEN使用運營商。在調用CONVERT時使用%2011%,可能會導致誤報,比如當你有11月20日的時候。 – Swartz 2011-02-11 20:23:49

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') 

這是一種更好的方式來處理日期時間恕我直言