在字符串中查找字符串并在 SQL 服务器中更新
Find a string inside a string and update in SQL Server
我有一个这样的 table :
create table Fbank (id int, COCODE nvarchar(max))
insert into Fbank
values (1, '<row xml:space="preserve" id="174580000041250.040002">
<c1>HTG115960001</c1>
<c2>14013514,48</c2>
<c3>222</c3>
<c4>BAL MIGRATED</c4>
<c5>NULL</c5>
<c6>NULL</c6>
<c7>NULL</c7>
<c8>9900</c8>
<c9>11596</c9>
<c10>20151017</c10>
<c11>HTG</c11>
<c12>NULL</c12>
<c13>NULL</c13>
<c14>FT1529010083</c14>
<c15>1</c15>
<c16>FT1529010083</c16>
<c17>FT</c17>
<c18>20151017</c18>
<c19>NULL</c19>
<c20>0</c20>
<c21>5033_INPUTTER__OFS_AUTO.FT</c21>
<c22>5033_INPUTTER_OFS_AUTO.FT</c22>
<c23>1510181127</c23>
<c24>HG0010001</c24>
</row>')
我需要替换标签c24标签内的字符串..
异常输出:我需要像这样在 c24 标签内用 'T' 替换要替换的字母 'G' - HT0010001,其余的应该保持不变...
我累的是:
declare @searchText varchar(20) = (
select SUBSTRING(COCODE,CHARINDEX('<c24>', COCODE), 7)
from FBNK_EB_SFF_ACCT_HI000)
update Fbank
set cocode = STUFF(@searchText, CHARINDEX('<c24>', COCODE), 1, 'T')
如果代码总是以 'H' 开头,那么我想将“H”作为要替换的字符串的一部分,然后再将其重新添加回去会更容易:
update Fbank
set COCODE = replace(cocode, '<c24>HG', '<c24>HT');
如果没有,那么我会说您在 charindex
和 substring
方面走在正确的轨道上。但是使用 patindex
代替,并直接更新 fbank
,不要将搜索词放入任何变量。如果您试图将逻辑分成几部分,请考虑 cross apply
:
update fb
set cocode = stuff(cocode, ix, 1, 'T')
from Fbank fb
cross apply (select ix = patindex('%<c24>%', cocode) + 6) ap
where substring(cocode, ix, 1) = 'G'
我有一个这样的 table :
create table Fbank (id int, COCODE nvarchar(max))
insert into Fbank
values (1, '<row xml:space="preserve" id="174580000041250.040002">
<c1>HTG115960001</c1>
<c2>14013514,48</c2>
<c3>222</c3>
<c4>BAL MIGRATED</c4>
<c5>NULL</c5>
<c6>NULL</c6>
<c7>NULL</c7>
<c8>9900</c8>
<c9>11596</c9>
<c10>20151017</c10>
<c11>HTG</c11>
<c12>NULL</c12>
<c13>NULL</c13>
<c14>FT1529010083</c14>
<c15>1</c15>
<c16>FT1529010083</c16>
<c17>FT</c17>
<c18>20151017</c18>
<c19>NULL</c19>
<c20>0</c20>
<c21>5033_INPUTTER__OFS_AUTO.FT</c21>
<c22>5033_INPUTTER_OFS_AUTO.FT</c22>
<c23>1510181127</c23>
<c24>HG0010001</c24>
</row>')
我需要替换标签c24标签内的字符串..
异常输出:我需要像这样在 c24 标签内用 'T' 替换要替换的字母 'G' - HT0010001,其余的应该保持不变...
我累的是:
declare @searchText varchar(20) = (
select SUBSTRING(COCODE,CHARINDEX('<c24>', COCODE), 7)
from FBNK_EB_SFF_ACCT_HI000)
update Fbank
set cocode = STUFF(@searchText, CHARINDEX('<c24>', COCODE), 1, 'T')
如果代码总是以 'H' 开头,那么我想将“
update Fbank
set COCODE = replace(cocode, '<c24>HG', '<c24>HT');
如果没有,那么我会说您在 charindex
和 substring
方面走在正确的轨道上。但是使用 patindex
代替,并直接更新 fbank
,不要将搜索词放入任何变量。如果您试图将逻辑分成几部分,请考虑 cross apply
:
update fb
set cocode = stuff(cocode, ix, 1, 'T')
from Fbank fb
cross apply (select ix = patindex('%<c24>%', cocode) + 6) ap
where substring(cocode, ix, 1) = 'G'