WHERE是NULL子句返回NON NULL值

时间:2016-11-18 16:06:28

标签: sql oracle

这令我感到困惑。我有以下查询:

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%')

1 个答案:

答案 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%')