web-dev-qa-db-ja.com

SQLServerクエリvarcharデータはintのように並べ替えられます

私は次のようなテーブルを1つ持っています

CREATE TABLE table_name
(
P_Id int,
amount varchar(50)
)

いいねデータ

Id amount
----------
1 2340
2 4568
3 10000

テーブルを金額で並べ替えたいのですが、問題の1つは、金額がvarcharであるため、このようにテーブルを並べ替えることです。

Id amount
----------
3 10000
1 2340
2 4568

でもこんな結果が欲しい

Id amount
----------
3 10000
2 4568
1 2340

私は何をすべきか ?

15
Archit

以下を選択しながら、ORDER BY句の数値に金額列をキャストします。

SELECT * FROM MyTable
ORDER BY CAST(amount AS Numeric(10,0)) DESC

結果:

╔════╦════════╗
║ ID ║ AMOUNT ║
╠════╬════════╣
║  3 ║  10000 ║
║  2 ║   4568 ║
║  1 ║   2340 ║
╚════╩════════╝

このSQLFiddle を参照してください

19
hims056

ABS()を試してください:

SELECT * FROM MyTable ORDER BY ABS(MyCol) DESC;

SQLフィドル

13
speeday125

これを試して

SELECT * FROM #varchar_field ORDER BY CASE WHEN ISNUMERIC(mixed_field) = 1 THEN CAST(mixed_field AS FLOAT) WHEN ISNUMERIC(LEFT(mixed_field,1)) = 0 THEN ASCII(LEFT(LOWER(mixed_field),1)) ELSE 2147483647 END

参照: http://sqlserverplanet.com/tsql/how-to-order-numeric-values-in-a-varchar-field

0
hesham.shabana