我有一個包含4個組件的庫存字段,每個組件都由「 - 」分隔。我不確定如何使用charindex
來解析字符串,以便我爲每個在delmiters之間找到的值返回一個列。例如:字段值或字符串=項目顏色大小形狀。如何從分隔字符串創建多列
我的目標是結束一個項目作爲列,顏色作爲列,大小作爲列和最終形狀。
我有一個包含4個組件的庫存字段,每個組件都由「 - 」分隔。我不確定如何使用charindex
來解析字符串,以便我爲每個在delmiters之間找到的值返回一個列。例如:字段值或字符串=項目顏色大小形狀。如何從分隔字符串創建多列
我的目標是結束一個項目作爲列,顏色作爲列,大小作爲列和最終形狀。
如果是最多4列,你可以嘗試這樣的:
declare @Table table (SomeColumn varchar(100));
insert into @Table
select 'ball-blue-small-round' union all
select 'ball-red-small-round' union all
select 'ball-green-small-round' union all
select 'ball---square' union all
select '----';
;with stage (s)
as ( select replace(SomeColumn, '-', '.')
from @Table
)
select [item] = parsename(s,4),
[color] = parsename(s,3),
[size] = parsename(s,2),
[shape] = parsename(s,1)
from stage;
如果> 4,請回復,我們可以在一個更加動態的解決方案工作。
對於遲到的回覆,我表示歉意,但正在處理另一部分內容。我不明白你的選擇和聯盟是什麼意思。我對這些東西很陌生。 – user131602
我現在明白了,你正在創建一個測試表。它剛剛在我身上曙光..我現在正在嘗試解決方案。 – user131602
數據列向右傾斜,第一列返回空值 – user131602
使用交叉APPLYs(用於理解冗長的名字) -
declare @Table table (SomeColumn varchar(100));
insert into @Table
select 'ball-Orange-small-round' union all
select 'bat-blue-medium-square' union all
select 'stumps-green-large-rectangle'
SELECT * FROM @Table
SELECT Sub1.FirstSub1 AS Item
,Sub2.SecondSub1 AS Color
,Sub3.ThirdSub1 AS Size
,SubAfterThirdHyphen AS Shape
FROM @Table
CROSS APPLY (SELECT CHARINDEX('-',SomeColumn) AS FirstHyphenPos) AS Pos1
CROSS APPLY (SELECT SUBSTRING(SomeColumn,1,FirstHyphenPos-1) AS FirstSub1) AS Sub1
CROSS APPLY (SELECT SUBSTRING(SomeColumn,FirstHyphenPos+1,LEN(SomeColumn)) AS SubAfterFirstHyphen) AS Substr1
CROSS APPLY (SELECT CHARINDEX('-',Substr1.SubAfterFirstHyphen) AS SecondHyphenPos) AS Pos2
CROSS APPLY (SELECT SUBSTRING(Substr1.SubAfterFirstHyphen,1,SecondHyphenPos-1) AS SecondSub1) AS Sub2
CROSS APPLY (SELECT SUBSTRING(Substr1.SubAfterFirstHyphen,SecondHyphenPos+1,LEN(Substr1.SubAfterFirstHyphen)) AS SubAfterSecondHyphen) AS Substr2
CROSS APPLY (SELECT CHARINDEX('-',Substr2.SubAfterSecondHyphen) AS ThirdHyphenPos) AS Pos3
CROSS APPLY (SELECT SUBSTRING(Substr2.SubAfterSecondHyphen,1,ThirdHyphenPos-1) AS ThirdSub1) AS Sub3
CROSS APPLY (SELECT SUBSTRING(Substr2.SubAfterSecondHyphen,ThirdHyphenPos+1,LEN(Substr2.SubAfterSecondHyphen)) AS SubAfterThirdHyphen) AS Substr3
[在多行分割值(的
SQL小提琴 - http://www.sqlfiddle.com/#!3/91c28/1 – Narsimha
我正在嘗試您的解決方案。非常感謝你的迴應者 – user131602
可能重複http://stackoverflow.com/questions/13159526/split-values-over-多行) – Taryn
不是真的重複。似乎我們需要每個分隔符列,而不是行。 –