我有这个字符串 name-surname-15A-15B ,例如,如果我想得到最后一个段(15B),我可以使用以下查询:
Select right(Code, charindex('-', reverse(Code)) - 1) as segment From MyTable
但是如何在特定的破折号之后获取字符串,例如第二个将返回15A-15B?
答案 0 :(得分:3)
另一个选项是ParseName()
,前提是细分不超过4
示例强>
Declare @S varchar(50)='name-surname-15A-15B'
Select ParseName(Replace(@S,'-','.'),1)
<强>返回强>
15B
最后两个职位
Declare @S varchar(50)='name-surname-15A-15B'
Select ParseName(Replace(@S,'-','.'),2)
+'-'
+ParseName(Replace(@S,'-','.'),1)
<强>返回强>
15A-15B
答案 1 :(得分:2)
嗯,你可以通过使用这样的东西来做到这一点。
SELECT SUBSTRING( string , LEN(string) - CHARINDEX('-',REVERSE(string)) + 2 , LEN(string) ) FROM SAMPLE;
其中string
是您要拆分的字符串。
答案 2 :(得分:2)
如果-
的值中有3个且只有3个连字符(Code
),则可以这样做:
SELECT Code,
RIGHT(Code, LEN(Code) - CI1.CI) AS C1,
RIGHT(Code, LEN(Code) - CI2.CI) AS C2, --One you're after
RIGHT(Code, LEN(Code) - CI3.CI) AS C3
FROM (VALUES ('name-surname-15A-15B')) V(Code)
CROSS APPLY (VALUES(CHARINDEX('-',V.Code))) CI1(CI)
CROSS APPLY (VALUES(CHARINDEX('-',V.Code,CI1.CI+1))) CI2(CI)
CROSS APPLY (VALUES(CHARINDEX('-',V.Code,CI2.CI+1))) CI3(CI);
您可以轻松扩展此功能;但是,如果您有很多分隔符,我建议查看字符串拆分器,然后使用FOR XML PATH
将字符串重新连接在一起。 编辑:或STRING_AGG
您正在使用SQL Server 2017。