将带有分隔符的列拆分为多列 [英] Split Column with delimiter into multiple columns
问题描述
我有一张有 20 列的表格.其中一列包含由分号分隔的多个值.它看起来像这样:
I got a table with 20 columns. One of the columns contains multiple values separated by a semicolon. It looks like this:
-9;-9;-1;-9;-9;-9;-9;-9;-1;-9;-9;-9;-9;-9;-9;-9;-9;-9;-1;-9;-9;-9;-9;-9;-9;-9;-9;-9;-1;-9;-1;-9;-9;-9;-1;-9;-9;-9;-9;-9;-9;-1;-1;-1;-1;-9;-1;-1;-9;-9;-9;-9;-1;-9;-1;-9;-9;-9;-1;-9;-1;-9;-1;-9;-9;-9;-9;-1;-9;-9;-1;-1;-9;-1;-1;0000;FFF8;-9;-9;-9;-1;-9;-1;-9;FFF6;-9;-1;-9;-1;-9;-1;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9
它总是包含 115 个值.值可以是-1"、-9"或十六进制数.
It contains always 115 values. The values can be "-1", "-9" or a hex number.
现在我想创建一个包含原始 20 列和 115 列 foreach 分隔字符串的视图.有人可以帮我吗?
Now I want to create a view which contains the original 20 columns plus 115 columns foreach delimited string. Can someone help me?
推荐答案
这是一个如何执行此操作的示例:
This is an example on how to do this:
DECLARE @tt TABLE(i INT IDENTITY,x VARCHAR(8000));
INSERT INTO @tt(x)VALUES('-9;-9;-1;-9;-9;-9;-9;-9;-1;-9;-9;-9;-9;-9;-9;-9;-9;-9;-1;-9;-9;-9;-9;-9;-9;-9;-9;-9;-1;-9;-1;-9;-9;-9;-1;-9;-9;-9;-9;-9;-9;-1;-1;-1;-1;-9;-1;-1;-9;-9;-9;-9;-1;-9;-1;-9;-9;-9;-1;-9;-1;-9;-1;-9;-9;-9;-9;-1;-9;-9;-1;-1;-9;-1;-1;0000;FFF8;-9;-9;-9;-1;-9;-1;-9;FFF6;-9;-1;-9;-1;-9;-1;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9;-9');
SELECT
i,
val1=n.v.value('/e[1]','VARCHAR(16)'),
val2=n.v.value('/e[2]','VARCHAR(16)'),
val3=n.v.value('/e[3]','VARCHAR(16)'),
-- ... repeat for val4 .. val114
val115=n.v.value('/e[115]','VARCHAR(16)')
FROM
@tt
CROSS APPLY (
SELECT
CAST('<e>'+REPLACE(x,';','</e><e>')+'</e>' AS XML) AS itm
) AS i
CROSS APPLY i.itm.nodes('/') AS n(v);
这是一些 XML 技巧,通过将带有分隔值的列设为 XML,其中每个值都是一个 e
元素.然后使用 value
函数中的索引检索各个元素.
This is some XML trickery, by making the column with delimited values a XML where each value is an e
element. The individual elements are then retrieved using the index in the value
function.
由于这是一个单独的语句,因此可以用作视图中的查询.
Since this is a single statement it can be used as the query in a view.
这篇关于将带有分隔符的列拆分为多列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!