2017-10-09 168 views
0

2017-10-03 15:02:47で生成されたドキュメントがあります。Rails + ActiveRecord:比較の日付

その後、私は(私はRailsのを通してそれを実行するか、またはまっすぐな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月23:59:59 UTC 2017 –

+0

私はそれが2017-10-03 15:02:47が2017年よりも大きいと考えられているからだと思います。 10-03。あなたは、SELECT * FROMテーブルwhere needed_column <'2017-10-04'を使用することができます。 –

+0

このクエリを試すSELECT * FROM table needed_column <= Date '2017-10-03'; –

答えて

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'