1

postgresql に created_at 列を含む checkins テーブルがあるとすると、タイムゾーンを考慮しながら (たとえば 2012 年 10 月 17 日) に作成されたすべてのレコードを選択するにはどうすればよいでしょうか'America/New_York'。サマータイム)?

現在、次のクエリを実行していますpsql (PostgreSQL) 9.1.6が、1 日の終わりに追加されたいくつかのレコードが欠落しているようです。

SELECT COUNT(*) AS count FROM checkins WHERE date(created_at) = '2012-10-17';

これは、特定の日のすべてのレコードのリストです。上記のクエリは 10 を返しますが、これは正しくありません。13に戻るはずです。

  id  | waiver_id |         created_at         |         updated_at         
------+-----------+----------------------------+----------------------------
 1391 |         1 | 2012-10-18 00:42:07.308453 | 2012-10-18 00:42:07.308453
 1390 |       286 | 2012-10-18 00:38:53.102685 | 2012-10-18 00:38:53.102685
 1389 |       590 | 2012-10-18 00:38:28.811605 | 2012-10-18 00:38:28.811605
 1388 |         7 | 2012-10-17 22:29:25.610774 | 2012-10-17 22:29:25.610774
 1387 |      1155 | 2012-10-17 22:01:40.647219 | 2012-10-17 22:01:40.647219
 1386 |      1154 | 2012-10-17 22:00:05.477698 | 2012-10-17 22:00:05.477698
 1385 |      1153 | 2012-10-17 21:57:59.698076 | 2012-10-17 21:57:59.698076
 1384 |      1152 | 2012-10-17 21:08:32.533203 | 2012-10-17 21:08:32.533203
 1383 |      1151 | 2012-10-17 21:07:42.500036 | 2012-10-17 21:07:42.500036
 1382 |       115 | 2012-10-17 21:04:03.075333 | 2012-10-17 21:04:03.075333
 1381 |         3 | 2012-10-17 20:30:13.741647 | 2012-10-17 20:30:13.741647
 1380 |       245 | 2012-10-17 20:29:53.808852 | 2012-10-17 20:29:53.808852
 1379 |      1150 | 2012-10-17 20:27:30.057269 | 2012-10-17 20:27:30.057269

チェックイン列とdata_types

 column_name |          data_type          
-------------+-----------------------------
 updated_at  | timestamp without time zone
 created_at  | timestamp without time zone
 waiver_id   | integer
 id          | integer
4

1 に答える 1

5

あなたが正確に望むものに応じて、AT TIME ZONEコンストラクトが役立ちます。

列のタイプがtimestamp [without time zone]で、現地時間が EST とは異なるタイム ゾーンに設定されているが、EST での日付が必要な場合は、次のようにクエリを実行します。

SELECT count(*) AS ct
FROM   checkins
WHERE  (created_at AT TIME ZONE 'EST')::date = '2012-10-16';

確かなことは言えませんが、あなたの質問には基本的な情報が欠けており、解釈の余地があります。この関連する回答
の例とリンクを使用した PostgreSQL のタイム ゾーン処理の包括的な説明。

サマータイムを自動的に適用する場合は、タイム ゾーンの省略形ではなくタイム ゾーン名を使用しますお気に入り:

created_at AT TIME ZONE 'America/New_York'

詳細については、この関連する質問を参照してください。

于 2012-10-18T05:25:35.630 に答える