0

問題を単純化するために:1つの列を持つデータベーステーブルがあります。この列には、ユーザーが任意のテキストを保存できます(動的データがあります)。ここで、サンプルデータを保存するとします。

[a1, a2, a3, a20, a21]

テーブルからデータを選択するとき、次のように並べ替えます。

a1, a2, a3, a20, a21

そしてこれが好きではない:

a1, a2, a20, a21, a3

複雑なアルゴリズムを記述せずに(Access2007を使用していて、テーブルまたはクエリをフォームの要素にバインドしたいため)、SQLのみを使用する方法はありますか?

注意:ユーザーが数字のみを挿入する場合は、列タイプを数字に変更するだけで済みます。次に、それは正しい方法でソートされます。ただし、文字や特殊文字も処理する必要があります。

4

1 に答える 1

0

あなたが求めているのは、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
于 2012-09-13T13:22:30.593 に答える