这个问题在这里已有答案:
我有这个字符串name-surname-15A-15B,例如,如果我想得到最后一个段(15B),我可以使用以下查询:
Select right(Code, charindex('-', reverse(Code)) - 1) as segment From MyTable
但是如何在特定的破折号之后获得字符串,例如第二个将返回15A-15B?
另一个选择是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
那么你可以通过使用这样的东西来做到这一点。
SELECT SUBSTRING( string , LEN(string) - CHARINDEX('-',REVERSE(string)) + 2 , LEN(string) ) FROM SAMPLE;
其中string
是你要拆分的字符串。
如果在-
的值中有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
to将字符串连接在一起。编辑:或者STRING_AGG
of你正在使用SQL Server 2017。