日付フィールド「date_checked」(タイムスタンプ)に「いいね」を使用して、テーブルからデータを選択しようとしています。しかし、私はこのエラーがあります:
SQLSTATE[42883]: Undefined function: 7 ERROR: operator does not exist: timestamp without time zone
私のリクエストは:
SELECT my_table.id
FROM my_table
WHERE my_table.date_checker LIKE '2011-01-%'
使用したくない:
SELECT my_table.id
FROM my_table
WHERE my_table.date_checker >= '2011-01-01 00:00:00'
AND my_table.date_checker < '2011-02-01 00:00:00'
タイムスタンプ付きの<と>は「使いたくない」わけではありませんが、これらの演算子はインデックススキャンと文字列一致に変換できます。
さて、タイムスタンプを文字列に変換する前に、タイムスタンプを明示的に文字列に変換する必要があるため、エラーが発生しています:
date_checker::text LIKE '2011-01-%'
そしてI 仮定すると、(date_checker::text)
にインデックスを作成でき、その式はインデックススキャンになりますが... EWWWW。
おそらくdate_trunc
関数はあなたの好みにより合っています。
... WHERE date_trunc('month', my_table.date_checker) = '2011-01-01'
必要に応じて、その式にインデックスを付けることもできます。
最初に文字列表現に変換せずに、日付列でlike
を実行できるとは思わない。
たとえば、betweenクエリを使用して、2つの日付から選択できます。
SELECT id FROM my_table WHERE date_checker BETWEEN '2011-01-01' AND '2011-02-01';