这是查询的一部分,在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语法很好。为什么会发生此错误?
答案 0 :(得分:1)
直接减去间隔是PostgreSQL的事情,在MySQL / MariaDB上不起作用。
您可以改为使用DATE_SUB()函数。
例如:SELECT DATE_SUB(NOW(), INTERVAL 10 DAY);
答案 1 :(得分:0)
错误的原因是{new_user_interval} day
周围的单引号。但是请参阅上面的@Georgi的答案,因为它为我指明了正确的方向,所以我已接受了它。