在sql server中替换和删除字符串中的文本

时间:2010-12-15 13:39:35

标签: sql tsql sql-server-2008

我有以下字符串,它是样本

<b>22/10 - 10:47 - wes:</b> ###TaskDefId=46###N Enq - Send Quote<b><br/>29/10 - 15:55 - grn: Some Text ###TaskDefId=31### ABC - DEFG HIJ<b><br/>22/10 - 12:29 - white: ....

请看下面这是完整的字符串,原件如上所示,我已移除bbr标签,以使其更清晰。在每一行的最后,我写下了我想要删除的内容以及我想要替换的内容。

22/10 - 10:47 - wes: ###TaskDefId=46###N Enq - Send Quote               '###TaskDefId=46###N Enq - Send Quote' This should be removed completely 
29/10 - 15:55 - grn: Some Text ###TaskDefId=31### ABC - DEFG HIJ            '###TaskDefId=31###' This should be replaced with 'STAGE CHNAGED:'
22/10 - 12:29 - white: Eamiled ###TaskDefId=31### Qtd - Email and Email     '###TaskDefId=31###Qtd - Email and Email' This should be removed completely because last stage was exactly same
29/10 - 16:26 - wesl: Spoke ###TOaskDefId=48### CTD - DDDDDD            '###TOaskDefId=48###' This should be replaced with 'STAGE CHANGED:' becaue last stage was different
09/12 - 13:12 - wesl: Spoke ###TaskDefId=31### CTD - DDDDDD         '###TaskDefId=31###' This should be replaced with 'STAGE CHANGED:' becaue last stage was different
15/11 - 18:41 - white: Some xxxx ###TaskDefId=31### DDD AND - CDD TDED      '###TaskDefId=31###' This should be removed.
09/12 - 13:12 - wesl: Balanced ###TaskDefId=23### SDTED DERDDW          '###TaskDefId=23###' This should be replaced with 'STAGE CHANGED:'

如果问题看起来很乱,请复制并粘贴到记事本中,我希望这个问题有意义。让我再次告诉你,这是一个不同行的字符串。

修改

  1. 此字符串位于一列中 表和我需要更新相同 这些更改后的列。

  2. 正如我在问题中所解释的那样 我不只是想替换 并删除模式但替换 ### TaskDefId = seomnumber ### with 'STAGE CHANGED:'如果最后一次出现 模式和当前模式 完全相同,如果最后删除 发生的模式和 目前的情况有所不同。

  3. 由于

1 个答案:

答案 0 :(得分:0)

您可以使用 -

SELECT REPLACE ( string_expression , string_pattern , string_replacement )
GO 

但是在你的字符串中,我看到了许多你想要替换的模式。我建议你可以使用像 -

这样的东西
Declare @String_Original nvarchar(max)
DECLARE @Replacement1 nvarchar(50)
DECLARE @Pattern1 nvarchar(50)

@String_Original = 'your string'
@Pattern1 = '###TaskDefId=31###'
@Replacement1 = 'STAGE CHNAGED:'

SELECT REPLACE(@String_Original,@Pattern1,@Replacement)

现在,您必须反复执行此操作,直到您替换了要替换的所有模式。

也许就像 -

DECLARE @Replacement2 nvarchar(50)
DECLARE @Pattern2 nvarchar(50)

@String_Original = 'your string'
@Pattern2 = '###TaskDefId=46###N Enq - Send Quote'
@Replacement2 = ''

SELECT REPLACE(@String_Original,@Pattern2,@Replacement2)

并且,对所有要替换的模式执行此操作。但是,如果要替换的模式是动态的并且您事先不知道它,那么我担心简单,直接的重复将无法帮助您。您必须使用逻辑编写函数或存储过程来查找模式并替换它们。