web-dev-qa-db-ja.com

Postgresql-日付= "01/01/11"の場所を選択します

Postgresqlに「dt」という名前の日時フィールドがあります。私は次のようなことをしたいです

SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'

それを行う正しい構文は何ですか?

ありがとう!

35
Abramodj

dtdateにキャストして、 日付リテラルの形式 を修正すると思います。

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 は「日付」を理解せず、数値を返します。

73
mu is too short

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';
4
Hugh