Sql Server query varchar data sort like int

眉间皱痕 提交于 2019-12-03 11:46:49

问题


I have one table like

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

Data Like

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

Now I want to sort table by amount but one problem is amount is varchar so it sort table like this

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

but i want result like this

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

what should i do ?


回答1:


Cast amount column into Numeric in ORDER BY clause while selecting:

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

Result:

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

See this SQLFiddle




回答2:


Try ABS():

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

SQL Fiddle




回答3:


Try this

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

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



来源:https://stackoverflow.com/questions/16829663/sql-server-query-varchar-data-sort-like-int

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!