这令我感到困惑。我有以下查询:
SELECT *
FROM table.contract
WHERE end_date IS NULL
AND LOWER(NAME) LIKE 'name'
OR LOWER(NAME) LIKE '%name1%'
OR LOWER(NAME) LIKE '%name2%'
应该是这样,它应该只返回END_DATE为NULL的行,但是我得到的行中有一个日期。
数据类型是DATE,数据默认是(null)所以我不知道为什么它也会返回一些带日期的行。我只是脑屁吗?现在是星期五,如果我错过了一些简单的话,我会道歉。
非常感谢任何帮助!
编辑:我是一个白痴。我忘记了括号,代码应该如下:SELECT *
FROM table.contract
WHERE end_date IS NULL
AND (LOWER(NAME) LIKE 'name'
OR LOWER(NAME) LIKE '%name1%'
OR LOWER(NAME) LIKE '%name2%')
答案 0 :(得分:1)
您似乎缺少某些()以确保您的" AND"和您的" OR"之间的正确优先。
例如
SELECT *
FROM table.contract
WHERE end_date IS NULL
AND (LOWER(NAME) LIKE 'name'
OR LOWER(NAME) LIKE '%name1%'
OR LOWER(NAME) LIKE '%name2%')