0

datetime検索フィールドに入力された日付(たとえば、2012年7月4日)をテーブルの日付(という列)と比較したいと思いますdate。ただし、SQLクエリを正しく取得できないようです。

私が試したこと:

find(:all, :conditions => ['\'to_timestamp(date, \'DD Mon YYYY\')\' LIKE \'to_timestamp(?, \'DD Mon YYYY\')\'', '#{query}']) 

しかし失敗します:

PG::Error: ERROR:  syntax error at or near "DD"
LINE 1: ...s".* FROM "projects"  WHERE ('to_timestamp(date, 'DD Mon YYY...
                                                             ^
: SELECT "pacients".* FROM "projects"  WHERE ('to_timestamp(date, 'DD Mon YYYY')' LIKE 'to_timestamp('#{query}', 'DD Mon YYYY')')

(postgre)SQLに関する限り、私は真の初心者です。このクエリを作成する正しい方向へのヒントをいただければ幸いです。

どうもありがとう!

4

1 に答える 1

3

わずかな指摘として、ここにはいくつかの問題があります。

  • 誤った文字列補間
  • データベースに必要以上の作業をLIKE行わせ、日付検索をより直接的に実行できる場合に使用します。

ActiveRecordで日付入力をフォーマットし、次のようにストレートSQLを使用して日付を比較します。

start_date = Date.civil(2012, 7, 4)
end_date = Date.civil(2012, 7, 20)
User.where(["date BETWEEN ? AND ?", start_date, end_date])

ソース日付とデータベース内の日付を文字列のようにフォーマットされたタイムスタンプに変換してから使用することLIKEは、非常に回りくどく、パフォーマンスも低下します。

于 2012-07-04T18:09:27.353 に答える