あなたが求めているのは、SQLを使用してそれを実行したいという理由で、それぞれに独自の困難を伴ういくつかのステップが含まれていることです。質問に対するあなたのフレーズwithout writing a complex algorithm
とコメントEverything is possible
には互換性がありません。Everything is possible
主に、SQLがここでやろうとしていることを実行するように指示されていなかったため、やろうとしていることに多くの複雑さが加わります。
- 最初に文字列の形式を検証します。はい、実行できますが、SQLはクエリ言語です。可能であれば、外部のあらゆる種類の形式を使用することをお勧めします。
- 次に、表示される可能性のあるさまざまな可能性をすべて考慮して分割します。ここでも、SQLはこれを目的としたものではなく、実行できますが、データにはさまざまなケースがあります。
- 最後に値を並べ替えます。もう一度、1つの文字列を並べ替えて返します。順序付けは、値のチェーンではなく、セットで実行する必要がありますが、もちろん実行できます
@Remouがコメントで話しているのは、列のすべての値ではなく、異なる行にそれらの値を設定する必要があるということです。たとえば、次のようになります。
id value
1 a1
2 a41
3 s2
4 a52
5 a1b99ccc
ここから、注文を開始できます。あなたができる最初のステップの1つは、文字列をいくつかの行に分割し、一時テーブルに保存することです。ここから、作業するものがあります。次のスニペットを使用して、行で文字列を分割できます。
DECLARE @str NVARCHAR(100)= 'T,23,3434,332SB,1-1KD', @separator VARCHAR(1)= ','
DECLARE @SplitedList TABLE (code NVARCHAR(30))
DECLARE @XMLList XML
SET @XMLList=CAST('<i>'+REPLACE(@str, @separator,'</i><i>')+'</i>' AS XML)
INSERT INTO @SplitedList
SELECT x.i.value('(./text())[1]','varchar(100)')
FROM @XMLList.nodes('i') x(i)
SELECT * FROM @SplitedList