在sql中的特定字符后拆分字符串[重复]

Posted

技术标签:

【中文标题】在sql中的特定字符后拆分字符串[重复]【英文标题】:Splitting string after specific character in sql [duplicate] 【发布时间】:2018-08-14 10:15:03 【问题描述】:

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

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

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

【问题讨论】:

注意:虽然这是一个重复的问题,但警告:链接的问题提供了一些非常古老和过时的答案。它们在写的时候很好,但是搜索更新/更活跃的答案是个好主意...... 【参考方案1】:

另一个选项是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

【讨论】:

你又成功了:-D【参考方案2】:

你可以通过使用类似的东西来做到这一点。

SELECT SUBSTRING( string , LEN(string) -  CHARINDEX('-',REVERSE(string)) + 2  , LEN(string)  ) FROM SAMPLE;

string 是要拆分的字符串。

【讨论】:

【参考方案3】:

假设Code的值中有3个,并且只有3个连字符(-),你可以这样做:

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_AGGof 你正在使用 SQL Server 2017。

【讨论】:

我很想知道投反对票的目的。反馈总是受到赞赏。 :)

以上是关于在sql中的特定字符后拆分字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server实现将特定字符串拆分并进行插入操作的方法

将 SQL Server 中的字符串拆分为最大长度,并将每个字符串作为一行返回

使用正则表达式拆分以特定字符开头和结尾的组[重复]

T-SQL:与字符串连接相反-如何将字符串拆分为多个记录[重复]

T-SQL:与字符串连接相反-如何将字符串拆分为多条记录[重复]

T-SQL基于分隔符拆分列并将拆分后的字符串数组输入到多个表列中