Postgresqlに「dt」という名前の日時フィールドがあります。私は次のようなことをしたいです
SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'
それを行う正しい構文は何ですか?
ありがとう!
dt
をdate
にキャストして、 日付リテラルの形式 を修正すると思います。
SELECT *
FROM table
WHERE dt::date = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD
または 標準バージョン :
SELECT *
FROM table
WHERE CAST(dt AS DATE) = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD
extract
function は「日付」を理解せず、数値を返します。
PostgreSQLでは、多数の日付/時刻関数を使用できます。 here を参照してください。
あなたの例では、次を使用できます:
SELECT * FROM myTable WHERE date_trunc('day', dt) = 'YYYY-MM-DD';
このクエリを定期的に実行している場合は、date_trunc
関数を使用してインデックスを作成することもできます。
CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt) );
この利点の1つは、必要に応じてタイムゾーンの柔軟性がいくらか向上することです。次に例を示します。
CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt at time zone 'Australia/Sydney') );
SELECT * FROM myTable WHERE date_trunc('day', dt at time zone 'Australia/Sydney') = 'YYYY-MM-DD';