我有一个 Redshift 数据表,其中所有时间值都存储在 CST 中,并且我根据邮政编码(位置)将时间值转换为相应的时区。
当我这样做时,我知道所有时间值都是标准时间,因此我的函数用法是
CASE WHEN **** convert_timezone('CST', 'EST', time_column)
WHEN **** convert_timezone('CST', 'MST', time_column)
....
END
一旦我们进入夏令时,这可能不适用。我怎样才能处理这个问题,以便我在 2018 年 3 月和将来不会再次修改 SQL 查询?
不要使用时区缩写。它们有些含糊不清,只能指时区的一方面。相反,使用完整的IANA 时区标识符 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones, 例如America/Chicago
为美国中部时间。
这在中得到了很好的解释Redshift 文档 http://docs.aws.amazon.com/redshift/latest/dg/CONVERT_TIMEZONE.html:
使用时区名称
如果您使用时区名称指定时区,CONVERT_TIMEZONE 会自动调整夏令时 (DST) 或对该时区有效的任何其他本地季节性协议,例如夏令时、标准时间或冬令时在“时间戳”指定的日期和时间期间。例如,“Europe/London”代表冬季为 UTC,夏季代表 UTC+1。
至于问题的“...基于邮政编码”部分,请了解并非每个邮政编码都是基于位置的。还有技术任务、海外 APO/FPO 地址、美国领土和其他边缘情况。此外,某些邮政编码可能跨越多个时区。
如果可能的话,更好的方法是:
- 获取纬度/经度坐标的近似值 - 根据您的源数据使用各种技术。例如,地理编码 API 可以获取街道地址并给出纬度/经度。
- 然后使用其中一种技术确定该位置的时区标识符此处列出 https://stackoverflow.com/q/16086962/634824.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)