首页 > 解决方案 > 在 2012 版中用连字符分割 SQL 中的字符串

问题描述

我在一列中有多个字符串,我在列之后得到最后一个字符串下面是三个类似的例子我有不同的数字连字符,可以出现在一个字符串中,但期望的结果是我在最后一个连字符之前有字符串

1. abc-def-Opto
2. abc-def-ijk-5C-hello-Opto
3. abc-def-ijk-4C-hi-Build 
4. abc-def-ijk-4C-123-suppymanagement

所需的结果集是

  1. 定义
  2. 你好
  3. 你好
  4. 123

如何在 SQL 查询中执行此操作以获取此结果集。我有 MSSQL 2012 版本 需要一个通用的 sql 可以得到结果集

标签: sql-servertsqlsplit

解决方案


有很多方法可以拆分/解析字符串。ParseName() 会失败,因为您可能有超过 4 个职位。

一种选择(只是为了好玩)是使用一点 XML。

  1. 我们反转字符串
  2. 转换成 XML
  3. 抓取第二个节点
  4. 反转最终演示的所需值

例子

Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values 
 ('abc-def-Opto')
,('abc-def-ijk-5C-hello-Opto')
,('abc-def-ijk-4C-hi-Build')
,('abc-def-ijk-4C-123-suppymanagement')

Select * 
      ,Value = reverse(convert(xml,'<x>'+replace(reverse(SomeCol),'-','</x><x>')+'</x>').value('x[2]','varchar(150)'))
 from @YourTable

退货

SomeCol                             Value
abc-def-Opto                        def
abc-def-ijk-5C-hello-Opto           hello
abc-def-ijk-4C-hi-Build             hi
abc-def-ijk-4C-123-suppymanagement  123

推荐阅读