通过 Update 语句替换 SQL 文本字符串的一部分

问题描述 投票:0回答:1

我正在尝试更新一组具有重复值的字符串,但我只想更新“第二”组重复值,而不是第一组。该值存储在 SQL Server 数据库的字符串字段中。以下是有问题的字符串:

Standard Activity Note |   Type of Recovery: Final |   Date of Member Settlement: 12/20/2023 |   TPL: 10/06/2023 |   UM:  |   UIM: 12/20/2023 |   n/a |   Total amount of member settlement: $30,755.00 |   TPL: $22,275.00 |   UM:  |   UIM: $8,500.00 |   n/a | 

Standard Activity Note |   Type of Recovery: Final |   Date of Member Settlement: 9/13/2023 |   TPL: 09/13/2023 |   UM:  |   UIM:  |   n/a |   Total amount of member settlement: $50,000.00 |   TPL: $50,000.00 |   UM:  |   UIM:  |   n/a | 

Standard Activity Note |   Type of Recovery: Final |   Date of Member Settlement: 10/9/2023 |   TPL: 10/09/2023 |   UM:  |   UIM:  |   n/a |   Total amount of member settlement: $7,500.00 |   TPL: $7,500.00 |   UM:  |   UIM:  |   n/a |   

我试图仅将文本中显示

TPL:
UM:
的部分更新为
TPL Amount:
UM Amount:
。问题是它在字符串中存在两次,因此如果我运行更新来替换
TPL:
的子字符串,它将更新两者。

关于如何更新 TPL 和 UM 字符串的第二个实例有什么想法吗?绳子里至少有管子,这样可能会有帮助。此外,我需要更新更加动态,因为我有大约 200 行需要更新,并且不能一次只更新一行。

UPDATE dbo.xxx
SET Value = REPLACE(Value, 'TPL:', 'TPL Amount:')
WHERE text_description like '%tpl:%'

UPDATE dbo.xxx
SET Value = REPLACE(Value, 'UM:', 'UM Amount:')
WHERE text_description like '%UM:%'

我相信上面的方法会起作用,但如果两个值存在的话它会更新它们,我只希望它更新字符串中文本的第二次迭代。

sql sql-server string t-sql replace
1个回答
0
投票

您可以使用 CARINDEX 查找第一次出现的 '| 嗯:|' 。然后对从该索引开始 10 个字符的子字符串执行替换。

UPDATE dbo.xxx
SET Value = substring(value, 1, charindex('|   UM:  |',value) +10)  +
    REPLACE( REPLACE(substring(value, charindex('|   UM:  |',value) +10, len(value)-charindex('|   UM:  |',value) +10), 
            'UM:', 
            'UM Amount:'),
             'TPL:', 'TPL Amount:'
          ) 

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.