在sql中的特定字符后拆分字符串

时间:2018-03-06 14:09:37

标签: sql sql-server split

我有这个字符串 name-surname-15A-15B ,例如,如果我想得到最后一个段(15B),我可以使用以下查询:

Select right(Code, charindex('-', reverse(Code)) - 1) as segment From MyTable

但是如何在特定的破折号之后获取字符串,例如第二个将返回15A-15B?

3 个答案:

答案 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。