SQL Server 2008将函数替换为排除项

时间:2012-06-05 20:53:12

标签: sql-server-2008 tsql function replace

我在一个包含子字符串nvarchar(max)的表中有一个'><'类型的列。

我需要替换'><'并将其设为'> ​ ​ ​ <',但我只想在不是'><\''><!'时才这样做。

有没有办法让替换函数有条件?

列中会出现几次'><'

感谢您的帮助。

2 个答案:

答案 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)'

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