19

我有一张桌子

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

我应该怎么办 ?

4

3 回答 3

25

选择时将金额列转换为 Numeric inORDER BY子句:

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

结果:

ID 数量
3 10000
2 4568
1 2340

看到这个 SQLFiddle

于 2013-05-30T06:47:48.673 回答
15

试试 ABS():

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

SQL小提琴

于 2013-05-30T06:55:47.280 回答
1

尝试这个

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

于 2016-12-22T12:50:51.417 回答