2

nvarchar(max)在包含 substring 的表中有一个类型的列'><'

我需要更换'><'并制作它'> ​ ​ ​ <',但我只想在它不是'><\'或时才这样做'><!'

有没有办法使替换功能有条件?

列中将出现多次'><'

谢谢你的帮助。

4

2 回答 2

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;
于 2012-06-05T21:05:55.867 回答
1

可以安装 CLR 程序集吗?正则表达式可能更直接。或者你可以通过三个替换函数调用来做到这一点。

第一个替换'><'为,'> <'然后两个替换'> <(exclamation)''><(exclamation)'和 。'> <(backslash)''><(backslash)'

不过,这最终可能会替换在第一次操作中未修改的现有文本。

于 2012-06-05T21:02:16.977 回答