我正在尝试为用户应用程序构建“最近 30 天”动态 SQL 日期过滤器。日期列是 unix 纪元毫秒时间戳。
该工具的先前版本允许用户选择日期范围,我现在只是将其更改为选择最后 30 个日期范围。
数据存储在 Redshift 中,不支持 from_unixtime
。
我有两个挑战:
- 数据以 UTC 格式存储,需要使用 EST (UTC -5) 中的日期进行过滤。
- “选择最近 30 天”是指以昨天午夜为截止点,并以昨天减去 29。
以前,我的代码如下所示:
"datecol" >= DATEDIFF(millisecs, '1969-12-31 19:00:00', ''start date' 00:00:00')
AND "datecol" <= DATEDIFF(millisecs, '1969-12-31 19:00:00', ''end date' 23:59:59')
应用程序将按照用户的描述更新开始和结束日期。该代码针对时差进行了调整。
如何使用 Redshift SQL 的约束在 Unix 时间戳上使用 GETDATE()
和 DATEADD()
?
谢谢。
最佳答案
extract('epoch' from ts)
为您提供 unix 时间戳,您只需添加 5 小时即可查询 UTC,就像它是 EST 一样(如果 EST 是 UTC-5,则 UTC 是 EST+5)
between extract('epoch' from ('<<date1>>' + interval '5 hour'))
and extract('epoch' from ('<<date2>>' + interval '29 hour' - interval '1 second'))
此外,from_unixtime
可以在 Redshift 中表示如下:
select timestamp 'epoch' + unix_ts_column * interval '1 second'
有点难看,但工作原理就是这样
关于mysql - 使用 SQL 选择动态 Unix 纪元时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46059477/