如果值为null或为空,则SQL忽略条件子句

时间:2018-10-23 11:52:21

标签: sql

我有以下查询

SELECT id, namn, postA, postB postN FROM k.dbo.PF WHERE
        namn LIKE @name + '%' AND
        postA LIKE @address + '%' AND
        postB LIKE @coAddress + '%' AND
        postN LIKE @zip + '%' AND
        k.dbo.status = 0

只要我在所有字段中都有正确的值,此查询就起作用。但是在这种情况下,数据库中的转交地址(postB列)有时可以为空。但是,当我为参数@coAddress提供空值时,查询不会返回任何内容。如果coAddress参数为null,如何重写此查询,以便完全跳过 AND 子句?

2 个答案:

答案 0 :(得分:0)

使用OR

SELECT id, namn, postA, postB postN
FROM k.dbo.PF
WHERE (@name is null OR namn LIKE @name + '%') AND
      (@address is null OR postA LIKE @address + '%') AND
      (@coAddress is null OR postB LIKE @coAddress + '%') AND
      (@zip is null OR postN LIKE @zip + '%') AND
      k.dbo.status = 0;

答案 1 :(得分:0)

尝试:-

SELECT id, namn, postA, postB postN FROM k.dbo.PF WHERE
        namn LIKE @name + '%' AND
        postA LIKE @address + '%' AND
        (@coAddress is NULL or postB LIKE @coAddress + '%') AND
        postN LIKE @zip + '%' AND
        k.dbo.status = 0

任何涉及NULL值的表达式都将始终返回false(“ IS NULL”除外)。