ในเกล็ดหิมะตอนที่กำลังทำการแปลงบางอย่าท้องถิ่นวันที่ต้อง UTC และจากนั้นกลับไปที่เขตเวลาท้องถิ่นโดยใช้ CONVERT_TIMEZONE ฟังก์ชันจุดจบผลลัพธ์ที่ได้จากหนึ่งชั่วโมง สำหรับตัวอย่าง:
ALTER SESSION SET TIMEZONE = 'Canada/Eastern';
select
cast('1949-04-24' as timestamp) as date_local -- because TIMEZONE = 'Canada/Eastern'
, convert_timezone('Canada/Eastern', 'UTC', '1949-04-24') as date_utc
, convert_timezone('UTC', 'Canada/Eastern', convert_timezone('Canada/Eastern', 'UTC', '1949-04-24')) as date_local1
ได้ผลลัพธ์:
DATE_LOCAL | DATE_UTC | DATE_LOCAL1 |
---|---|---|
1949-04-24 00:00:00.0 | 1949-04-2405:00:00.0 | 1949-04-24 01:00:00.0 |
ฉันคาดหวังทั้งสอง DATE_LOCAL และ DATE_LOCAL1 จะเป็นเหมือนกันอย่างไรก็ตาม DATE_LOCAL1 เป็นเวลาหนึ่งชั่วโมงนะ นี่คือคาดหวัง? ฉันพลาดอะไรไปหรือมีข้อผิดพลาดของ CONVERT_TIMEZONE ฟังก์ชัน?