我有一个包含以下列的表格:
|start_date |TZ |
|Dec 2, 2012 |Eastern |
|Dec 2, 2012 |GMT |
注1:我们的服务器是UTC时间。
注 2:start_date 列是日期字段,而不是时间戳字段。2012 年 12 月 2 日隐含的意思是“2012-12-02 00:00:00”
注3:上表实际上是多个规范化的表,但为了简单起见,我对其进行了反规范化。
注 4:我可以将任何东西放入 TZ 表中以简化操作。
我想select from my_table where start_date <= now()
但是,由于时区,这不起作用。如果当前日期/时间是东部时间 12 月 1 日晚上 9 点(UTC 时间 12 月 2 日凌晨 1 点),上述查询将返回两个结果,但我真的只想要第二个。夏令时使这进一步复杂化。
理想情况下,我想要一个执行以下操作的查询:
select * from my_table where convert_to_utc_timestamp(start_date,tz) <= now()
上述方法会将 start_date 转换为时间戳,然后将其转换为正确的时区。
我将如何在 SQL 中执行此操作?