Postgresql
將天數添加到時間戳
我想從時間戳中添加(或更確切地說是減去)天數。
例如,
2020-04-13 00:00:00 Europe/Berlin
我想減去 20 天,我希望結果是2020-03-24 00:00:00 Europe/Berlin
.如果我跑
select ('2020-04-13 00:00:00 Europe/Berlin'::timestamptz - INTERVAL '20 DAY') AT TIME ZONE 'Europe/Berlin'
我明白了
2020-03-23 23:00:00.000000
。這似乎是因為 PostgreSQL 減去 20 * 24 hours (在該日期範圍內發生 DST 切換),這與減去 20 days不同。
間隔計算在您的會話設置的任何時區完成。這記錄在這裡:
當向帶時區值的時間戳添加間隔值(或從中減去間隔值)時,天數組件將帶時區的時間戳的日期提前或減少指定的天數,保持一天中的時間相同。在夏令時更改(當會話時區設置為辨識 DST 的時區時),這意味著間隔“1 天”不一定等於間隔“24 小時”
我不知道您的會話時區設置為(您可以
show timezone;
查看),但顯然它不是“歐洲/柏林”。當設置為“歐洲/柏林”時,我得到了您期望的答案。無論您的會話時區設置為什麼,都不會執行 DST,或者不會在相關時間段內實現轉換。如果它在此期間的日子真的是 24 小時。