我有一个类型为nvarchar(max)
的列在包含子字符串'><'
的表中。SQL Server 2008替换功能与排除
我需要更换'><'
并使其成为'> <'
,但我只想在它不是'><\'
或'><!'
时这样做。
有没有办法使替换函数有条件?
列中将出现若干次'><'
。
感谢您的帮助。
我有一个类型为nvarchar(max)
的列在包含子字符串'><'
的表中。SQL Server 2008替换功能与排除
我需要更换'><'
并使其成为'> <'
,但我只想在它不是'><\'
或'><!'
时这样做。
有没有办法使替换函数有条件?
列中将出现若干次'><'
。
感谢您的帮助。
您可以这样做,首先将您想保留的序列替换为不会自然出现在列中的序列,然后替换要替换的序列,然后将其他替换掉。
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;
你可以安装CLR程序集吗?正则表达式可能更直接。或者你可以用三个替换函数调用。
第一与'> <'
取代'><'
然后两个与'><(exclamation)'
和'> <(backslash)'
与'><(backslash)'
替换'> <(exclamation)'
。
这可能最终会取代第一次操作中未修改的现有文本。