试图编写与PostgreSQL和Amazon Redshift都兼容的查询。
原因:将数据从PG同步到RS以执行复杂的查询,但是在dev / QA环境中,预算(和数据库大小)决定仅使用PG。
请求:返回昨天的日期
在PostgreSQL中:
SELECT DATE((NOW() - '1 DAY'::INTERVAL));
在Redshift中:
SELECT DATE(DATEADD(DAY, -1, GETDATE()));
问题:两者都不在另一个平台上工作。
是否有兼容的方式来实现所请求的操作? 我们希望避免使用ORM。
答案 0 :(得分: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
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