我希望删除字符串中两个不同特殊字符之间的文本。该字符串是逗号分隔的列表,其中包含一个值,该值后面紧跟着特殊字符,其中包含子字符串。字符和子字符串可以在逗号分隔列表中出现一次,多次或根本不出现。此外,两个字符之间的子字符串永远不会相同。我想删除大于/小于符号之间的任何内容,以及这两个字符。请注意我无权在此数据库中创建临时函数。
目前的结果:
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
答案 0 :(得分:1)
对于SQL Server:
在SQL Server 2016+中,您可以使用string_split()
和SQL Server 2017+ string_agg()
(但string_split()
不会返回序数。)
在SQL Server 2016之前...使用Jeff Moden的CSV Splitter表值函数,我们可以在<
上拆分,并使用stuff()
删除里面>
的部分使用select ... for xml path ('')
method of string concatenation:
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 |
+----------+------+-----------------------------+
拆分字符串参考: