簡體   English   中英

不考慮夏令時,僅在2:00 UTC檢索帶有時間戳的行(帶有時區)的SQL查詢

[英]SQL Query that only retrieves timestamped (with time zone) rows at 2:00 UTC regardless of Daylight Savings Time

我確定標題可能令人困惑。 如果沒有長的標題,就找不到找到在標題中表達得很好的方法

簡而言之

我有一個PSQL數據庫表,該表每15分鍾存檔一次外部API端點。 該表包括以下列:

  • id(序列)
  • 匹配(jsonb)
  • snapshot_time(時區不為null的時間戳記default now())

我需要一個僅在以下約束下獲取行的SQL查詢:

  • 這天必須是星期六(6)
  • 時間戳記必須為ISO8601的'... T02:00:00Z'
  • 在指定的開始日期和結束日期之間。

我目前有什么

SELECT id,snapshot_time,match->'kills' FROM match_archive 
WHERE extract(dow from snapshot_time)=6 
AND snapshot_time >= '2016-12-01' 
AND date_part('hour', snapshot_time)=2 
AND date_part('minute', snapshot_time)=00;

(例如,當前開始時間和結束時間已采用硬編碼)

問題

這將返回正確的行,但是問題是,自從我居住在東部標准時間以來,由於snapshot_time列的類型為timestamp with time zone類型的結果行實際上就關閉了5個小時。

它返回的示例行是

   id   |         snapshot_time         |                  ?column?
--------+-------------------------------+--------------------------------------------
 120941 | 2016-12-03 02:00:03.32946-05  | {"red": 3389, "blue": 1962, "green": 2911}

如您所見,snapshot_time確實是2:00,但它在EST中。

我想,“嘿,我可以把它設為小時:21,星期幾:5(星期五)”,這行得通,但是由於將來的夏令時,突然之間會減少一個小時。

另一件事是使用timestamp without time zone來存儲信息,但是會發生什么事情呢,這將需要2016-12-03T17:44:21-05並砍掉-05並將其保留為2016-12-03T17:44:21Z在數據庫中插入新行時為2016-12-03T17:44:21Z

因此,有沒有什么好方法可以進行SQL查詢,使我可以按照上面列出的要求獲取行,而不必擔心夏時制? 謝謝。

這將返回正確的行,但是問題是,自從我居住在東部標准時間以來,由於snapshot_time列的類型為帶有時區的timestamp類型的結果行實際上就關閉了5個小時。

根據文檔 ,時間戳始終存儲在PostgreSQL中的UTC中。

對於帶時區的時間戳,內部存儲的值始終以UTC(通用協調時間,通常稱為格林威治標准時間,GMT)表示。 使用該時區的適當偏移量,將指定了明確時區的輸入值轉換為UTC。 如果在輸入字符串中未指定時區,則假定該時區位於系統的TimeZone參數指示的時區中,並使用時區時區的偏移量轉換為UTC。

當輸出帶有時區值的時間戳時, 總是將其從UTC轉換為當前時區,並在該時區中顯示為本地時間。 要查看另一個時區的時間,請更改時區或使用AT TIME ZONE構造 (請參見第9.9.3節 )。

如果有人在Google上遇到此問題,請回答我的問題。

按照Evan Carroll的回答,以下SQL修復了我的問題:

SELECT id,snapshot_time,match->'kills' FROM match_archive 
WHERE extract(dow from snapshot_time AT TIME ZONE 'UTC')=5 
AND snapshot_time >= '2016-12-01' 
AND date_part('hour', snapshot_time AT TIME ZONE 'UTC')=2 
AND date_part('minute', snapshot_time AT TIME ZONE 'UTC')=00;

分鍾date_part上可能不是必需的,但是要保持一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM