0

MySQLデータベースに対して次のクエリがあります。

Article.where('DAY( created_at ) = DAY( ? )', day)

そして、PostgreSQLデータベースでも上記のクエリを使用しようとしています。具体的には、次のようなものを試しています。

Article.where("DATE_PART('day', created_at) = DATE_PART('day', ?)", today)

しかし、私はエラーが発生していますPGError: ERROR: function date_part(unknown, unknown) is not unique

なぜそのエラーがあるのですか?ドキュメントによる構文があると思いました...

4

2 に答える 2

2

todayパターンの文字列のようですYYYY-MM-DD。現在までキャストしてから数値を抽出する代わりに、右端の2文字を抽出することもできます。より速く、より簡単になります:

Article.where("date_part('day', created_at::date)::int
                        = right(?, 2)::int", today)

right()PostgreSQL9.1以降が必要です。古いバージョンでは、次のように置き換えることができます。

... = substring(?, 9)

文字9と10が必要だからです。


これも機能するはずです:

Article.where("date_part('day', created_at::date)::int
                        = date_part('day', ?::date)", today)

にキャストする必要があることに注意してください。にキャスト'2012-01-16'する必要はありませdateinterval'2012-01-16'::intervalナンセンスだろう。

于 2012-01-16T23:10:16.087 に答える
1

ドキュメントによると、2つの機能があります。

  • date_part(text, timestamp)
  • date_part(text, interval)

そのため、データベースは必要なものを選択できません。2番目のパラメーターをタイムスタンプにキャストします(例:次のように)。

DATE_PART('day', created_at::interval) = DATE_PART('day', ?::interval)
于 2012-01-16T22:17:44.190 に答える