是否有根据日期转换为 PST 或 PDT 的 SQL 函数?
Posted
技术标签:
【中文标题】是否有根据日期转换为 PST 或 PDT 的 SQL 函数?【英文标题】:Is there a SQL function to convert to PST or PDT depending on the date? 【发布时间】:2021-08-19 23:21:22 【问题描述】:我想将太平洋时间转换为 UTC。但是,我必须首先根据日期将时间转换为 PST 或 PDT。是否有可以执行此操作的 SQL 函数,或者有人对创建此函数有任何建议吗?
【问题讨论】:
您使用的是哪个 dbms?在日期/时间方面,许多产品远不符合 ANSI SQL。 我不确定我使用的是什么 dbms。我怎样才能找到这些信息?您是在建议我创建自己的函数吗? 大多数数据库都有自己的功能,可惜功能不同。 谢谢!我有 PostgreSQL 10.16 (Ubuntu 10.16-1.pgdg16.04+1)at time zone 'pst' at time zone 'utc'
和 at time zone 'pdt' at time zone 'utc'
会给你不同的结果,相差 1 小时。并且select timestamp'2021-06-01 11:23:39' at time zone 'america/los_angeles' at time zone 'utc'
返回与“pdt”相同的结果,正如预期的那样。
【参考方案1】:
您提供的链接作为时间戳指南几乎毫无用处。如果您要使用时区,请将您的时间戳存储在 timestamp with time zone
字段中。 timezone
实际上不会被存储,但时间戳将被存储为UTC
。每当输入 timestamp
时,它都会旋转到 UTC
值。这使得在未来更容易处理价值。如果您想考虑DST
转换,您将需要使用完整的时区名称,例如US/Pacific
,因为它们涵盖了构成标准/夏令时时区的两个偏移量(PST/PDT
)。正如您发现的那样,使用偏移量 PST(-08)
或 PDT(-07)
可以获得固定偏移量,无论日期如何。
【讨论】:
以上是关于是否有根据日期转换为 PST 或 PDT 的 SQL 函数?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Snowflake 将时间 PST/PDT 转换为时间戳