2017-10-09 55 views
0

我有一個已經產生,也就是說,在2017-10-03 15:02:47文檔。Rails的ActiveRecord的+:比較日期

然後我就這個軌道/ SQL查詢(如果我運行它通過軌道或直接通過SQL控制檯,其結果都是一樣的也沒關係):

SELECT * FROM table where needed_column <= '2017-10-03'; 

此查詢將不會返回我在2017-10-03 15:02:47上生成的文檔。如果我不跑,不過,這個查詢:

SELECT * FROM table where needed_column <= '2017-10-03 23:59:59'; 

然後我得到所需要的文件(上2017-10-03 15:02:47生成)。

爲了解決這個問題,我可以的時候手動添加到查詢(23:59:59),但它不是一個很優雅的解決方案。

我使用Rails 5,AR,PostgreSQL的 - 有沒有更好的辦法來解決這個問題,而不是手動添加時間戳查詢?

謝謝

+0

嘗試使用「end_of_day」,例如:Time.now.end_of_day給週一09年10月23:59:59 UTC 2017年 –

+0

我認爲這是因爲2017年10月3日15時02分47秒被認爲是不僅僅是2017-更大10-03。你可以使用SELECT * FROM表where needed_column <'2017-10-04'; –

+0

嘗試此查詢SELECT * FROM表,其中needed_column <=日期 '2017年10月3日'; –

回答

0

needed_column大概節約時間戳(日期和時間)。當你已經理解了它,你需要將它與其他時間戳比較或使用::date

Model.where("needed_column::date <= '2017-10-03'") 

needed_column這將產生:

SELECT table.* FROM table WHERE (needed_column::date <= '2017-10-03') 
0

Rails中試試這個: -

Model.where(needed_column: [Time.now.at_beginning_of_day, Time.now.end_of_day]) 

或作爲SQL查詢: -

SELECT * FROM table_name WHERE needed_column BETWEEN '2017-10-09 00:00:00 UTC' AND '2017-10-09 23:59:59 UTC'