我有一张像
这样的桌子CREATE TABLE table_name
(
P_Id int,
amount varchar(50)
)
数据如
Id amount
----------
1 2340
2 4568
3 10000
现在我想按金额对表进行排序,但一个问题是金额是varchar,所以它像这样对表进行排序
Id amount
----------
3 10000
1 2340
2 4568
但我想要这样的结果
Id amount
----------
3 10000
2 4568
1 2340
我该怎么办?
选择时将金额列转换为
ORDER BY
子句中的数字:
SELECT * FROM MyTable
ORDER BY CAST(amount AS Numeric(10,0)) DESC
您可以根据您的要求更改小数点数值以获得更精确的结果:
SELECT * FROM MyTable
ORDER BY CAST(amount AS Numeric(10,2)) DESC
^
结果:
身份证 | 金额 |
---|---|
3 | 10000 |
2 | 4568 |
1 | 2340 |
注意:正如@Ice所建议的,如果金额字段包含非数字数据,例如
ab123
或xyz
(显然),这将失败。
试试这个
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