将列中的多个值拆分为单独的列

时间:2016-03-18 15:59:06

标签: sql sql-server sql-server-2008

我有一个表,列中有多个值存储在一列中我希望将该数据查询到文件并将值分开。

示例:此列(SHIFT_LENGTHS)的值存储为每周的每一天与#34;#"的对应关系。作为表示星期几的秒数的分隔符。

SELECT 
  NAME
 ,SHIFT_LENGTHS
FROM SHIFTGUARANTEE
ORDER BY NAME

SQL结果

NAME  ,SHIFT_LENGTHS
Shift1,#14400#14400#14400#14400#14400#14400#14400#

我想查询数据并以这种方式将其显示在文件中:

NAME  ,Mon  ,Tue  ,Wed  ,Thu  ,Fri  ,Sat  ,Sun
Shift1,14400,14400,14400,14400,14400,14400,14400

1 个答案:

答案 0 :(得分:1)

如果字符串的格式是固定的,你可以使用子字符串函数解析它:

SELECT 
  NAME
 ,SUBSTRING(SHIFT_LENGTHS, 2, 5) mon
 ,SUBSTRING(SHIFT_LENGTHS, 8, 5) tue
 ,SUBSTRING(SHIFT_LENGTHS, 14, 5) wed
 ,SUBSTRING(SHIFT_LENGTHS, 20, 5) thu
 ,SUBSTRING(SHIFT_LENGTHS, 26, 5) fri
 ,SUBSTRING(SHIFT_LENGTHS, 32, 5) sat
 ,SUBSTRING(SHIFT_LENGTHS, 38, 5) sun
FROM SHIFTGUARANTEE
ORDER BY NAME

如果格式没有修复,您可以使用charindex函数来获取分隔符的索引,或自定义CLR正则表达式函数。

在另一个问题的答案中使用交叉应用也是一个很好的解决方案:How to split a comma-separated value to columns