SQL:语法错误

时间:2017-01-24 09:53:33

标签: mysql sql

我在MySql中执行此查询:

SELECT amount
FROM Prices
WHERE (item_id = 1246 AND
       ('2016-12-26' BETWEEN (effective_date AND COALESCE(end_date, NOW()))))

但由于某种原因,我得到一个语法错误,我不知道它在哪里。 错误是:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')) AND(item_id = 1419 AND ('2017-01-14' BETWEEN (effective_date AND COALESCE(end' at line 1
价格是这样的: 价格

id
item_id
effective_date
end_date

1 个答案:

答案 0 :(得分:3)

我不认为BETWEEN和该表达式的第一个词之间应该有括号。这样的事情应该有效:

SELECT amount
FROM Prices
WHERE item_id = 1246 AND
      '2016-12-26' BETWEEN effective_date AND COALESCE(end_date, NOW())

这个问题是一个错字,但是这个答案可能对想要了解使用BETWEEN的正确方法的人有用。

MySQL documentation for BETWEEN并未明确提及有关括号的任何内容,但似乎是根据给出的示例暗示这一点。

基于本地测试,BETWEEN表达式中两个术语中的每一个的括号都可以,例如。

WHERE '2016-12-26' BETWEEN (effective_date) AND (COALESCE(end_date, NOW()))

但是,在整个子句周围加上括号会产生错误,这就是你正在做的事情:

WHERE '2016-12-26' BETWEEN (effective_date AND COALESCE(end_date, NOW()))