改变 isnull 中的值

alter value in isnull

我有一个存储过程,如果参数不为空,我将在其中搜索列的一部分。

问题是我要搜索的值混在一长串其他值中。下面是一行的示例:

'...value=153139,example=xyz,param=15,morestuff=otherthings...' //ignore the actual names, it's just examples for SO

所以这不会起作用,因为它可能 select 错误的事情(value=153139 会导致匹配,如果 @param = '15'):

WHERE
    [column] LIKE ISNULL(@param, [column])

这也行不通:

WHERE
    [column] LIKE '%param=' + ISNULL(@param, [column]) + '%'

对我来说最完美的是 ISNULL(check_expression, replacement_if_null, replecement_if_not_null),但据我所知,这并不存在..

P.S。我知道信息的存储方式不是最佳的,但它是系统使用的方式,我必须使用它 =/ 所以不要像 "You should split the column up so that it only contains one value" 这样的评论

你试过case语句了吗:

case when check_expression is null then replacement_if_null else replecement_if_not_null end

 [column] LIKE '%param=' + ISNULL(@param, [column]) + ',%' -- comma added before the last %

如有必要,请使用 @param 并确保您没有在值周围隐藏 space(rtrim 或 ltrim 可用于删除它们)