Sql Server查询varchar数据排序类似于int

Arc*_*hit 14 sql sql-server sql-order-by

我有一张桌子

CREATE TABLE table_name
(
P_Id int,
amount varchar(50)
)
Run Code Online (Sandbox Code Playgroud)

数据类似

Id amount
----------
1 2340
2 4568
3 10000
Run Code Online (Sandbox Code Playgroud)

现在我想按数量对表进行排序,但是一个问题是数量是varchar,所以它像这样对表进行排序

Id amount
----------
3 10000
1 2340
2 4568
Run Code Online (Sandbox Code Playgroud)

但我想要这样的结果

Id amount
----------
3 10000
2 4568
1 2340
Run Code Online (Sandbox Code Playgroud)

我该怎么办 ?

him*_*056 20

ORDER BY在选择时将数量列转换为Numeric in 子句:

SELECT * FROM MyTable
ORDER BY CAST(amount AS Numeric(10,0)) DESC
Run Code Online (Sandbox Code Playgroud)

结果:

???????????????
? ID ? AMOUNT ?
???????????????
?  3 ?  10000 ?
?  2 ?   4568 ?
?  1 ?   2340 ?
???????????????
Run Code Online (Sandbox Code Playgroud)

看到这个SQLFiddle

  • 请注意,如果Amount无法转换为数值,则语句将失败.这也会发生在10.5或10,5之类的漂亮值上,具体取决于某些国家/地区的配置. (3认同)

aiz*_*zaz 14

试试ABS():

SELECT * FROM MyTable ORDER BY ABS(MyCol) DESC;
Run Code Online (Sandbox Code Playgroud)

SQL小提琴