sql-server - 在 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
所需的结果集是
- 定义
- 你好
- 你好
- 123
如何在 SQL 查询中执行此操作以获取此结果集。我有 MSSQL 2012 版本 需要一个通用的 sql 可以得到结果集
解决方案
有很多方法可以拆分/解析字符串。ParseName() 会失败,因为您可能有超过 4 个职位。
一种选择(只是为了好玩)是使用一点 XML。
- 我们反转字符串
- 转换成 XML
- 抓取第二个节点
- 反转最终演示的所需值
例子
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
推荐阅读
- ms-access - ms 访问表单以插入记录组
- jmeter - 在 CircleCI 中自动化 jmx 文件
- php - 在 Laravel 5.7 上确定每个用户级别/角色的布局
- python-3.x - 带有 AES CBC 的 AWS KMS python3.6 和 boto3 示例
- go - 使用 Golang 导出导入
- swift - UICollectionViewCell 委托不会触发
- python - 删除停用词 - Python
- mysql - Jquery Datatable:使用 Left Join 和 Where 子句计算记录
- angularjs - 为什么即使在我们调用其余调用的同一服务器上运行 Angular 应用程序也会出现 cors 问题
- javascript - 什么是 browsertools://browsertools.library.js?