sql - redshift 中的 CONVERT_TIMEZONE 产生与预期相反的结果
问题描述
根据 Redshift 文档,语法应如下所示:
CONVERT_TIMEZONE ( ['source_timezone',] 'target_timezone', 'timestamp')
这似乎适用于标准时区名称,但是当源时区指定为 UTC +/- 某些数字时,它似乎无法正常工作。事实上,它似乎只是在倒退。
我正在尝试运行以下查询,例如:
select convert_timezone('UTC','UTC-8','2019-01-01 00:00:0000')
预期的结果是这应该从我的时间戳中减去 8 小时,因为从 UTC(源)到 UTC-8 应该需要 8 小时。相反,它增加了 8 小时,我的结果是2019-01-01 08:00:00.000000
. 为什么会这样?或者,转换为命名时区按预期工作:
select convert_timezone('UTC','America/Los_Angeles','2019-01-01 00:00:0000')
此查询正确显示2018-12-31 16:00:00.00000
为结果。
那么为什么这个功能是倒退的呢?一个明显的解决方法是向后构造我的查询,但这似乎是一个尴尬的解决方案。而且我只会使用一个命名的时区,但没有一个命名的时区是我所知道的明确的 UTC-8(例如,洛杉矶在 PDT 期间是 GMT-7,所以这不起作用)。
解决方案
Redshift 时区偏移与其数学运算符相反。另一种思考方式是相对于自己失去(-)时间并获得(+)时间。如果您从 UTC 时区前往 America/Los_Angeles 时区,时钟会倒退,导致您个人获得(+) 八小时(在阳光下多出一整天!)。
推荐阅读
- .net-core - 如何在 .net 核心应用程序中解密 access_token
- python - Python 字符串访问
- audiokit - 如何在音序器中播放单个音频文件
- c# - 为什么我的 foreach 循环不起作用?
- javascript - Changing color of an inline SVG
- airconsole - 空调模拟器在刷新时没有显示我更新的代码
- javascript - Angular - 正确嵌套 Observables 及其订阅
- reactjs - 如何使用胜利做实时图表?
- javascript - 在对象初始化上使用 Object.setPrototypeOf() 会影响性能吗?
- c++ - Issues with classes and static variables