WHERE是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%'

因为它应该是,它应该只返回行,其中的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%')

您似乎缺少一些()来确保您的"AND"one_answers"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%')

最新更新