昨天-在Redshift和PostgreSQL中-日期添加兼容性

Lav*_*dor 2 postgresql amazon-redshift

尝试编写将与PostgreSQL和Amazon Redshift兼容的查询。

原因:将数据从PG同步到RS以执行复杂的查询,但是在dev / QA环境中,预算(和数据库大小)指示仅使用PG。

要求:返回昨天的日期

在PostgreSQL中:

SELECT DATE((NOW() - '1 DAY'::INTERVAL)); 
Run Code Online (Sandbox Code Playgroud)

在Redshift中:

SELECT DATE(DATEADD(DAY, -1, GETDATE()));
Run Code Online (Sandbox Code Playgroud)

问题:两者都不能在另一个平台上工作。

是否有兼容的方式来实现所请求的操作?ORM是我们要避免的选项。

a_h*_*ame 5

以下在Postgres和Redshift中起作用:

ANSI标准SQL:

SELECT current_date - interval '1' day;
-- 2018-06-19 00:00:00
SELECT current_timestamp - interval '1' day;
-- 2018-06-19 13:40:06.509337+00
Run Code Online (Sandbox Code Playgroud)

Postgres(我相信Redshift也是如此)也支持替代(非标准)间隔语法: interval '1 day'

或更紧凑(不是100%ANSI SQL,但两者均可):

SELECT current_date - 1;
-- 2018-06-19 00:00:00
SELECT current_timestamp - 1;
-- 2018-06-19 13:40:06.509337+00
Run Code Online (Sandbox Code Playgroud)