SQL - 运算符 LIKE returns '%' 或 null

SQL - Operator LIKE returns '%' or null

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

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

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

您只需使用

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

不使用 CASE ... WHEN ...ISNULL 函数,您可以这样做:

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

您不需要使用 case 语句。尝试以下操作:

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

因为你的两个 case 语句都会产生与上面相同的效果。