0

我正在寻找删除字符串中两个不同特殊字符之间的文本。该字符串是一个以逗号分隔的列表,其中包含一个紧跟其后的特殊字符和一个子字符串的值。字符和子字符串可以在逗号分隔列表中出现一次、多次或根本不出现。此外,两个字符之间的子字符串永远不会相同。我想删除大于/小于符号以及这两个字符之间的任何内容。请注意,我无权在此数据库中创建临时函数。

当前结果:

PersonID     Loc     Code
12345    LOC1    M25.532<1010771>, S52.572A<1010772>, S66.892A<1010773>
12346    LOC2    M20.530<1010652>, S52.573A<1010752>
12347    LOC3    M29.52<1045201>

期望的结果:

PersonID     Location Code
12345    LOC1     M25.532, S52.572A, S66.892A
12346    LOC2     M20.530, S52.573A
12347    LOC3     M29.52
4

1 回答 1

1

对于 SQL Server:

在 SQL Server 2016+ 中,您可以在 SQL Server 2017+ 中使用string_split()string_agg()(但string_split()不返回序数)。

在 SQL Server 2016 之前...使用 Jeff Moden 的 CSV 拆分器表值函数,我们可以拆分<,并使用字符串连接方法stuff()删除>子查询内部的部分,该部分使用select ... for xml path ('')字符串连接方法将字符串连接在一起

select 
    t.PersonID
  , t.Loc
  , Code = (
      select stuff(s.Item,1,charindex('>',s.Item),'')
      from [dbo].[delimitedsplit8K](t.Code,'<') s
      where s.item<>''
      order by s.ItemNumber
      for xml path (''), type).value('.','varchar(8000)')
from t

rextester 演示:http ://rextester.com/JONQ18668

返回:

+----------+------+-----------------------------+
| PersonID | Loc  |            Code             |
+----------+------+-----------------------------+
|    12345 | LOC1 | M25.532, S52.572A, S66.892A |
|    12346 | LOC2 | M20.530, S52.573A           |
|    12347 | LOC3 | M29.52                      |
+----------+------+-----------------------------+

拆分字符串参考:

于 2017-04-24T20:38:25.700 回答