在字符串中查找字符串并在sql server中更新

slsn1g29  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(383)

我有一张这样的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中的字符串。。
例外输出:我需要替换字母'g'将被替换为't'像这样在c24标签-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')
zvokhttg

zvokhttg1#

如果代码总是以“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'

相关问题