2012-06-05 7 views
2

У меня есть столбец типа nvarchar(max) в таблице, содержащей подстроку '><'.SQL Server 2008 Заменить функцию с исключениями

мне нужно заменить '><' и сделать его '> ​ ​ ​ <', но я только хочу, чтобы это сделать, когда это не '><\' или '><!'.

Есть ли способ сделать функцию замены условной?

В колонке будет несколько вхождений '><'.

Благодарим за помощь.

ответ

2

Вы можете сделать это, сначала заменив последовательности, которые вы хотите сохранить, с последовательностями, которые естественно не появятся в столбце, а затем замените те, которые вы хотите заменить, а затем переключите остальные.

DECLARE @x NVARCHAR(MAX) = N'<foo><blat><!--comment--><\blat><bar>'; 

SELECT @x = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@x, 
    '><!', '~~~~~!'), '></', '~~~~~\ '), -- hide ones you want to keep 
    '><', '> <'),      -- replace ones you want to replace 
    '~~~~~!', '><!'), '~~~~~\ ', '><\'); -- un-hide the ones you want to keep 

SELECT @x; 
1

Можете ли вы установить сборки CLR? Регулярное выражение может быть более прямым. Или вы можете сделать это с тремя вызовами функции замены.

Первый заменить '><' с '> <' потом еще два, чтобы заменить '> <(exclamation)' с '><(exclamation)' и '> <(backslash)' с '><(backslash)'.

Это может привести к замене существующего текста, который не был изменен в первой операции.

Смежные вопросы