sql - 从 SQL Server 表中的连字符字符串列中提取第 1 个、第 2 个、第 3 个值,直到第 n 个值

标签 sql sql-server t-sql sql-server-2008 split

表中的值类似于带有连字符的 12-43-5765-234-56-24-6456-234-678-9-0-0

我需要将第一个值作为单独的列,将第二个值作为单独的列,依此类推。

我尝试过这样的。

DECLARE @S VARCHAR(MAX);
SET @S = '12-43-5765-234-56-24-6456-234-678-9-0-0'

SELECT SUBSTRING(@S, 0, CHARINDEX('-', @S)) AS first

上面的查询仅选择第一个值,但是如何从字符串中提取第四个和第五个值?就像

12 as first,
43 as second,
5765 as third,
234 as fourth,
56 as fifth,
24 as sixth and so on..

最佳答案

如果您的职位数量达到上限(或已知),并且不想想要动态

示例

DECLARE @S VARCHAR(MAX);
SET @S='12-43-5765-234-56-24-6456-234-678-9-0-0'


Select Pos1 = xDim.value('/x[1]','varchar(max)') --could change to desired datatype (int ?)
      ,Pos2 = xDim.value('/x[2]','varchar(max)') 
      ,Pos3 = xDim.value('/x[3]','varchar(max)')
      ,Pos4 = xDim.value('/x[4]','varchar(max)')
      ,Pos5 = xDim.value('/x[5]','varchar(max)')
      ,Pos6 = xDim.value('/x[6]','varchar(max)')
      ,Pos7 = xDim.value('/x[7]','varchar(max)')
      ,Pos8 = xDim.value('/x[8]','varchar(max)')
      ,Pos9 = xDim.value('/x[9]','varchar(max)')
      ,Pos10= xDim.value('/x[10]','varchar(max)')
      ,Pos11= xDim.value('/x[11]','varchar(max)')
      ,Pos12= xDim.value('/x[12]','varchar(max)')
      ,Pos13= xDim.value('/x[13]','varchar(max)')
 From  (Select Cast('<x>' + replace(@S,'-','</x><x>')+'</x>' as xml) as xDim) as A 

返回

enter image description here

关于sql - 从 SQL Server 表中的连字符字符串列中提取第 1 个、第 2 个、第 3 个值,直到第 n 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46514957/

相关文章:

sql-server - SQL Server BCP 将二进制文件导出到文件 : extra data at the begining of the file

sql-server-2008 - 如何找到 SSRS 报告背后的存储过程/脚本?

sql - 计算连续天数 SQL Server

php - 按 bool 值排序

sql - 从 SELECT 结果创建 varchar

sql - 根据位置将数组中的元素相乘

sql-server - 在SSIS中显示foreach循环迭代次数

sql-server - 查询在某些数据库中有效,但在其他数据库中无效。似乎是处理嵌套函数的查询解析问题。知道为什么吗?

php - MySQL查询从字段中提取第一个单词

MySQL - 获取产品数量