Sql代码从单列中获取多列

时间:2015-06-06 18:46:41

标签: sql sql-server ssis multiple-columns

我有一个像" AP.1.12345.ABCD.20150523_0523.20150524_0223"这样的专栏。

我可以根据"将列分成多列。 。 " ?

对于上面的示例列,输出将类似于

AP 1 12345 ABCD 20150523_0523 20150524_0223.

因此,单列将转换为6列。

3 个答案:

答案 0 :(得分:0)

在网络上搜索split()功能。这并不难。 Google" SQL Server拆分"而且你会有很多选择。你实际上想要一个给你第二个返回值的东西,即子串在较大字符串中的位置。

然后:

select t.*, newcols.*
from table t cross apply
     (select max(case when pos = 1 then val end) as col1,
             max(case when pos = 2 then val end) as col2,
             max(case when pos = 3 then val end) as col3,
             max(case when pos = 4 then val end) as col4,
             max(case when pos = 5 then val end) as col5,
             max(case when pos = 6 then val end) as col6             
      from dbo.split(t.col, '.') as s(val, pos)
      group by t.col
     ) newcols;

答案 1 :(得分:0)

您还可以编写一个函数来执行以下操作:

DECLARE @Col    VARCHAR(64),
        @DynSQL VARCHAR(MAX)

SET @Col = 'AP.1.12345.ABCD.20150523_0523.20150524_0223'
SET @DynSQL = 'SELECT '''+REPLACE(@Col,'.',''',''')+''''

exec(@DynSQL)

这可以处理任意数量的分隔符/列。

答案 2 :(得分:0)

感谢大家的建议和解决方案。 我得到了解决方案。经过一些实验,假设列将如上所述,我使用 substring charindex 来获得所需的结果。 虽然查询看起来有点大,但仍然有效。

我宁愿希望它是一个简单的查询而不是使用函数。

虽然需要检查查询的性能。