Postgresql

批量更新時間戳記錄以正確的時區

  • April 13, 2018

我正在尋找批量更新 postgresql 中的一些時間戳記錄。

我的應用程序在錯誤的時區 (BST) 中將時間戳儲存到時間戳列(沒有時區)。我只是在 DST 開始後(3 月 25 日)才注意到,所以並不是所有的記錄都是“錯誤的”。

    timestamp       
-------------------
2018-04-13 00:02:01
2018-04-11 20:22:32
2018-04-10 12:00:56
2018-04-10 11:25:56
2018-04-10 01:57:05
2018-04-07 03:38:32
2018-04-05 12:25:10
2018-04-05 09:09:49

我想將 BST 中的記錄範圍轉換為 UTC。這樣做的最佳方法是什麼?

要調整timestamp任何兩個給定時區之間的差異值,請AT TIME ZONE連續使用該構造兩次。看:

假設您要在“2018-03-25 01:00”英國夏令時 (BST) 開始後調整所有時間戳:

UPDATE tbl
SET    ts = ts AT TIME ZONE 'BST' AT TIME ZONE 'UTC'
WHERE  ts >= '2018-03-25 01:00';

當然,在您的特定範例中,您可能只需減去一個小時:

...
SET    ts = ts - interval '1 hour'
...

引用自:https://dba.stackexchange.com/questions/203890