изменить значение в isnull

У меня есть хранимая процедура, в которой я ищу часть столбца, если параметр не равен нулю.

Проблема в том, что значение, которое я ищу, замешано в длинной строке других значений. Вот пример того, как может выглядеть строка:

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

Так что это не сработает, потому что потенциально может быть выбрана неправильная вещь (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. Я знаю, что способ хранения информации не оптимален, но это то, что использует система, и мне приходится с этим работать =/ Поэтому никаких комментариев типа «Вы должны разделить столбец так, чтобы он содержал только одно значение», пожалуйста.


person Johan Hjalmarsson    schedule 07.08.2015    source источник


Ответы (1)


Вы пробовали оператор case:

case when check_expression is null then replacement_if_null else replecement_if_not_null end

or

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

Приведите @param, если это необходимо, и убедитесь, что у вас нет скрытого пространства вокруг значений (для их удаления можно использовать rtrim или ltrim)

person Julien Vavasseur    schedule 07.08.2015
comment
Заявление о случае выглядит хорошо, я попробую. Другой не будет работать, потому что если @param имеет значение null, он попытается сопоставить [column] с '%param='+[column]+'%' - person Johan Hjalmarsson; 07.08.2015
comment
Я воспользовался вашим первым предложением, и оно отлично работает =) Большое спасибо! - person Johan Hjalmarsson; 07.08.2015