我正在尝试使用带CHARINDEX的STUFF来更新字符串的特定部分。我在查找'@recipients'标签,并在末尾添加了另一封电子邮件。期望字符串上有一个'-@ recipients'和'@recipients'似乎工作正常,并且一直添加到注释部分。有没有一种方法可以跳过注释的部分以将其插入正确的位置?
这是我当前的代码。
STUFF(sjs.command, (CHARINDEX(',', sjs.command, CHARINDEX('@recipients',
sjs.command)) - 1), 1, ';alerts@companyname.com''')
答案 0 :(得分:1)
如果@recipients前面有空格或其他字符,则可以跳过-@ recipients。然后,您可以修改您的STUFF来检查“ @recipients”,如下所示。
STUFF(sjs.command, (CHARINDEX(',', sjs.command, CHARINDEX(' @recipients',
sjs.command)) - 1), 1, ';alerts@companyname.com''')
答案 1 :(得分:0)
这将删除--recipients
和随后的@
之间的所有内容。将sjs.command
替换为以下选择(将@test
替换为sjs.command
)
DECLARE @test varchar(max) = '@body=''blah'',--@recipients=''remove'',@recipients=''blah.com'',@subject=''blah'''
SELECT LEFT(@test, CHARINDEX('--@recipients', @test) -1) + RIGHT(@test, LEN(@test) - CHARINDEX('--@recipients', @test) - CHARINDEX('@', SUBSTRING(@test, CHARINDEX('--@recipients', @test) + 3, LEN(@test)))-1)
如果在真@recipients
前面有一致的空格或字符,我会更喜欢PriyankJ的答案。