4

次のデータを含む nvarchar 列があります。

1.0  
10.0      
10.1      
5.1       
6.4       
5.3       
90.5      
39.23     
23.2.2    
21.2.1    
4.3.1 

文字列として注文すると、次の結果が得られます。

1.0       
10.0      
10.1      
21.2.1    
23.2.2    
39.23     
4.3.1     
5.1       
5.3       
6.4       
90.5  

select * from mytable order by mycolumn

これは間違っています。たとえば、セットを数値としてソートする必要があります。

1.0
1.1
1.2
2.3
2.3.1

どうすれば正しくソートできますか?どんな助けにも感謝します!

4

1 に答える 1

3

数値で並べ替える必要がある場合は、データを数値として保存することをお勧めします。パーツを 3 つの列に格納すると、クエリを実行できますORDER BY n1, n2, n3
a を追加しcomputed columnて、完全な文字列を返すことができます。たとえば、次の式を使用します。

=convert(nvarchar(10), n1) + '.' + convert(nvarchar(10), n2) + 
CASE WHEN n3 IS NOT NULL THEN '.' + 
convert(nvarchar(10), n3) ELSE '' END

もちろん、dbms に文字列を逆アセンブルさせ、すべてのクエリでその部分を見つけて数値に変換させることもできますが、それは「遅く」、非効率的です。

編集

マーティン・スミスのコメントのリンクのように、私はまだ知りませんでした-実際には直接行うこと ができます

ORDER BY CONVERT(HIERARCHYID, '/' + myColumn + '/')
于 2013-10-05T10:46:44.637 に答える