SQL - 运算符LIKE返回'%'或null

时间:2017-07-27 06:46:52

标签: sql tsql sql-like

我需要为数据库创建一个查询过滤结果,如下所示:

    [ProjectNumber] LIKE
        CASE WHEN IsNull(@ProjectId,'') = '' THEN
        '%'
        ELSE
        @ProjectId + '%'
        END
    AND
    [CountryCode] LIKE
        CASE WHEN IsNull(@Country,'') = '' THEN
        '%'
        ELSE
        @Country + '%'
        END

当两个变量都有值时,一切正常,但如果@Country为null,则此查询返回CountryCode列中有值的所有结果,并且我需要返回all(即使该字段为Null)。任何人都知道如何在返回所有字段的null变量的情况下编写此查询(带有值的字段和带有null的字段)?

3 个答案:

答案 0 :(得分:2)

您可以执行以下操作,而不是使用CASE ... WHEN ...ISNULL功能:

...
(@ProjectId IS NULL OR [ProjectNumber] LIKE @ProjectId + '%')
AND
(@Country IS NULL OR [CountryCode] LIKE @Country + '%')
...

答案 1 :(得分:1)

您只需使用

即可
ProjectNumber LIKE IsNull(@ProjectId,'') + '%' AND 
CountryCode LIKE IsNull(@Country,'') + '%'

答案 2 :(得分:0)

您不需要使用案例陈述。试试以下内容:

ISNULL([ProjectNumber],'') LIKE IsNull(@ProjectId,'')+'%'
AND
ISNULL([CountryCode],'') LIKE ISNULL(@Country,'') + '%'

因为你的案例陈述都会产生同样的效果。