1

表1

id value
---------    
 1  100
2A  200
 2  300
10  500
 8  200
....

Select * 
from table1 
order by id

出力の表示

id value
------------    
 1 100
10 500
2A 200
 2 300
 8 200
....

正しい注文方法は?

期待される出力

id value
----------
 1 100
 2 300
2A 200
 8 200
10 500
....
4

5 に答える 5

1

最後の文字が文字である可能性があることが修正された場合は、次のクエリを試すことができます

 WITH A(ID) 
 AS
 (
 SELECT '1'
 UNION ALL
 SELECT '2C'
 UNION ALL
 SELECT '2A'
 UNION ALL
 SELECT '2'
 UNION ALL
 SELECT '10'
 )
 SELECT * 
 FROM A
 ORDER BY 
 convert(int,
 Case When IsNumeric(ID) = 0 then left(ID,len(id)-1) 
 Else ID END
 ) , Case When IsNumeric(ID) = 0 then RIGHT(ID,1) Else '0' END

変数の場合は、charecter をその ansi 値または 0 に置き換える関数を作成できます。次に、その列に近い順に並べます。

于 2012-10-28T19:16:11.480 に答える
0
SELECT * FROM table1 ORDER BY CAST(id as varchar(50))
于 2012-10-28T18:42:30.573 に答える
0
SELECT
LEFT(ID,1),
RIGHT(ID,1),
* 
FROM table1 
ORDER BY LEFT(ID,1),RIGHT(ID,1)

トリックを行う必要がありますが、選択したステートメントで左右が必要かどうかさえわかりません。

于 2012-10-28T18:33:35.570 に答える
0
Select * 
from table1 
order by cast(replace(lower(id), 'abcdefg', '') as int),
         replace(id, '0123456789','');
于 2012-10-28T18:36:20.973 に答える