それぞれが「-」で区切られた4つのコンポーネントを持つ在庫フィールドがあります。charindex
デリミター間で見つかった値ごとに列を返すように、文字列を解析するために使用する方法がわかりません。例:フィールド値または文字列=item-color-size-shape。
私の目標は、アイテムを列、色を列、サイズを列、そして最終的に形にすることです。
それぞれが「-」で区切られた4つのコンポーネントを持つ在庫フィールドがあります。charindex
デリミター間で見つかった値ごとに列を返すように、文字列を解析するために使用する方法がわかりません。例:フィールド値または文字列=item-color-size-shape。
私の目標は、アイテムを列、色を列、サイズを列、そして最終的に形にすることです。
最大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 を超える場合は、ご返信ください。より動的な解決策に取り組むことができます。
CROSS APPLY の使用 (理解のために長い名前を使用) -
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