如何修复postgresql间隔语法错误

new9mtju  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(397)

下面的代码可以在我的本地机器mysql 8.0上运行,但不能在postgresql上运行。

DB::raw('sum(CASE WHEN date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) THEN f.amount ELSE 0 END ) as last_month')

有人知道怎么修理吗?
错误:

syntax error at or near \"30\"\nLINE 1: ...um(CASE WHEN date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) TH...\n                                                            ^ (SQL:
vfhzx4xs

vfhzx4xs1#

数据库中的日期函数和语法差别很大。您不能仅仅将这样的代码从一个数据库移植到另一个数据库,并期望它能按原样工作。
postgres需要一个文本字符串作为间隔描述。它还支持标准 filter 要聚合函数和窗口函数,可将代码简化为:

sum(f.amount) filter(where date >= current_date - interval '30' day) as last_month

如果你愿意的话 0 当组中没有对应的行时:

coalesce(
    sum(f.amount) filter(where date >= current_date - interval '30' day), 
    0
) as last_month

相关问题