2012-06-05 70 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)''> <(backslash)''><(backslash)'替换'> <(exclamation)'

这可能最终会取代第一次操作中未修改的现有文本。