sql - 从 timestamptz 中提取日期部分
问题描述
我正在尝试从带有时区的时间戳中提取小时。然而,我的时代来不及了。
这是一个示例,我正在使用 Dbeaver 并将我的时区设置为 EST:
SELECT '2020-01-24 14:27:12' AT TIME ZONE 'US/Pacific' as foo,
EXTRACT(HOUR FROM foo) as ex,
DATE_PART('HOUR', foo::timestamp) as dp
回报:
foo |ex |dp
2020-01-24 17:27:12 |22 | 22
- 为什么我的时间提前了 3 个小时,它应该落后了 3 个小时?
Extract
而且DATE_PART
似乎没有得到我想要的时间。看起来它将 17 作为 EST,然后将其转换为 UTC。这是我期望得到的:
foo |ex |dp
2020-01-24 11:27:12 |11 | 11
解决方案
检查您的时区是否设置为 EST:
SELECT current_setting('TIMEZONE');
或与:
show timezone;
如果不是,您可以这样设置:
set timezone to est;
如本演示所示
如果那不起作用,请尝试convert_timezone
select convert_timezone('US/Pacific', '2020-01-24 14:27:12')
探索手头的材料,我发现了这个事实:
注意 Amazon Redshift 不验证 POSIX 样式的时区规范,因此可以将时区设置为无效值。例如,以下命令不会返回错误,即使它将时区设置为无效值也是如此。
将时区设置为“xxx36”;
从这个来源:https ://docs.aws.amazon.com/redshift/latest/dg/CONVERT_TIMEZONE.html
推荐阅读
- macos - 如何识别触控板上的两个手指平移?
- php - 跳过特定订阅产品的 WooCommerce 购物车
- c# - 如何在 nuget 中包含 dll 作为参考,当 nuget 添加到项目时,它也会被复制为参考
- c - 将数字从 1 乘到 N 的 C 程序
- git - 如何解决git不推送所有文件
- scala - 如何使用 transformWith() 忽略失败的期货?
- python - 在窗口的下部绘制 PyQt5
- javascript - 使用 docx 节点库添加更多图像以生成 word 文档时出现内存空间问题
- python - 如何查看一个值是否在熊猫的 1 列中有 2 个匹配项
- google-cloud-platform - Google Cloud Run 一遍又一遍地错误运行