我在一个包含子字符串nvarchar(max)
的表中有一个'><'
类型的列。
我需要替换'><'
并将其设为'> <'
,但我只想在不是'><\'
或'><!'
时才这样做。
有没有办法让替换函数有条件?
列中会出现几次'><'
。
感谢您的帮助。
答案 0 :(得分: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 :(得分:1)
您可以安装CLR程序集吗?正则表达可能更直接。或者你可以通过三个替换函数调用来完成它。
第一个用'><'
替换'> <'
,然后用'> <(exclamation)'
替换'><(exclamation)'
,用'> <(backslash)'
替换'><(backslash)'
。
这可能最终会替换第一次操作中未修改的现有文本。