将SQL查询从Postgres移到MariaDB时出错

时间:2019-01-17 14:15:23

标签: mysql django postgresql mariadb

这是查询的一部分,在PostgreSQL(在Django应用中)中可以正常工作:

CASE WHEN abc.name = 'foo bar'
    AND user.first_login <= (now() - interval '{new_user_interval} day') THEN 0
    ELSE COALESCE(abc.rank, 0)
END AS interesting_value,

但是,当我尝试在MariaDB数据库中运行它时,出现此错误:

  

您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以在')THEN 0 \ n ELSE COALESCE(abc.rank,0)\ n END AS interesti'第13行附近使用正确的语法

它似乎遵循MySQL case operator语法很好。为什么会发生此错误?

2 个答案:

答案 0 :(得分:1)

直接减去间隔是PostgreSQL的事情,在MySQL / MariaDB上不起作用。

您可以改为使用DATE_SUB()函数。

例如:SELECT DATE_SUB(NOW(), INTERVAL 10 DAY);

答案 1 :(得分:0)

错误的原因是{new_user_interval} day周围的单引号。但是请参阅上面的@Georgi的答案,因为它为我指明了正确的方向,所以我已接受了它。