SQL 将字符串拆分为列

SQL Split String Into Columns(SQL 将字符串拆分为列)
本文介绍了SQL 将字符串拆分为列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有包含财务帐户代码的字段:

I have field that contains financial account codes:

1000000-MER-MHO-GEN--------
1000000-MER-MHO-GEN-MUS-------
1000000-MER-MHO-GEN----RUG----
1000000-MER-MHO-GEN--------VET

我想用 - 作为分隔符将它分成 Seg01 到 Seg12 列

I would like to split it into columns Seg01 to Seg12 with - as the delimiter

前 4 个段将始终存在,然后可能存在一个或多个段.

The first 4 segments will always be there, then there after one or more segments could possibly exist.

推荐答案

这是一个使用 JSON 的快速选项.

Here's a quick option using a bit of JSON.

示例

Declare @YourTable Table ([SomeCol] varchar(50))  
Insert Into @YourTable Values 
 ('1000000-MER-MHO-GEN--------')
,('1000000-MER-MHO-GEN-MUS-------')
,('1000000-MER-MHO-GEN----RUG----')
,('1000000-MER-MHO-GEN--------VET')
 
Select A.* 
      ,Pos1  = JSON_VALUE(S,'$[0]')
      ,Pos2  = JSON_VALUE(S,'$[1]')
      ,Pos3  = JSON_VALUE(S,'$[2]')
      ,Pos4  = JSON_VALUE(S,'$[3]')
      ,Pos5  = JSON_VALUE(S,'$[4]')
      ,Pos6  = JSON_VALUE(S,'$[5]')
      ,Pos7  = JSON_VALUE(S,'$[6]')
      ,Pos8  = JSON_VALUE(S,'$[7]')
      ,Pos9  = JSON_VALUE(S,'$[8]')
      ,Pos10 = JSON_VALUE(S,'$[9]')
      ,Pos11 = JSON_VALUE(S,'$[10]')
      ,Pos12 = JSON_VALUE(S,'$[11]')
From @YourTable A
Cross Apply ( values ( '["'+replace(SomeCol,'-','","')+'"]' ) ) B(S)

结果

以防万一<2016 ...这是一种XML方法

Select A.*
      ,Pos1 = xDim.value('/x[1]' ,'varchar(100)')  -- Select the appropriate data type
      ,Pos2 = xDim.value('/x[2]' ,'varchar(100)')
      ,Pos3 = xDim.value('/x[3]' ,'varchar(100)')
      ,Pos4 = xDim.value('/x[4]' ,'varchar(100)')
      ,Pos5 = xDim.value('/x[5]' ,'varchar(100)')
      ,Pos6 = xDim.value('/x[6]' ,'varchar(100)')
      ,Pos7 = xDim.value('/x[7]' ,'varchar(100)')
      ,Pos8 = xDim.value('/x[8]' ,'varchar(100)')
      ,Pos9 = xDim.value('/x[9]' ,'varchar(100)')
      ,Pos10= xDim.value('/x[10]','varchar(100)')
      ,Pos11= xDim.value('/x[11]','varchar(100)')
      ,Pos12= xDim.value('/x[12]','varchar(100)')
From @YourTable A
Cross Apply ( values (convert(xml,'<x>' + replace(A.SomeCol,'-','</x><x>')+'</x>')) )B(xDim)

这篇关于SQL 将字符串拆分为列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
SSIS: Model design issue causing duplications - can two fact tables be connected?(SSIS:模型设计问题导致重复-两个事实表可以连接吗?)
SQL Server Graph Database - shortest path using multiple edge types(SQL Server图形数据库-使用多种边类型的最短路径)
Invalid column name when using EF Core filtered includes(使用EF核心过滤包括时无效的列名)
How should make faster SQL Server filtering procedure with many parameters(如何让多参数的SQL Server过滤程序更快)
How can I generate an entity–relationship (ER) diagram of a database using Microsoft SQL Server Management Studio?(如何使用Microsoft SQL Server Management Studio生成数据库的实体关系(ER)图?)