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 语句都会产生与上面相同的效果。
我需要创建一个数据库查询来过滤结果,如下所示:
[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 语句都会产生与上面相同的效果。