我有一个像" AP.1.12345.ABCD.20150523_0523.20150524_0223"这样的专栏。
我可以根据"将列分成多列。 。 " ?
对于上面的示例列,输出将类似于
AP 1 12345 ABCD 20150523_0523 20150524_0223.
因此,单列将转换为6列。
答案 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 来获得所需的结果。 虽然查询看起来有点大,但仍然有效。
我宁愿希望它是一个简单的查询而不是使用函数。
虽然需要检查查询的性能。