Reputation: 371
I have a varchar field in my table and I want to sort it. But I need to handle this field as integer. Meaning if sort as text the order is "19,2,20" but I want to get the right order "2,19,20".
Can anyone help me?
Upvotes: 37
Views: 57163
Reputation: 6722
All other answers use ABS
, which converts the values into absolute (positive) values, assuming that the integers are positive. A better solution would be to use * 1
:
SELECT *
FROM mytable
ORDER BY mycol * 1
This to prevent casting negative numbers into positive ones. Inspired by: mysql sort string number
Upvotes: 8
Reputation:
You can ABS()
for this purpose. ABS() is a mathematical function that returns the absolute (positive) value of the specified expression
. So query will be something like this
SELECT * FROM MyTable ORDER BY ABS(MyCol);
Upvotes: 5
Reputation: 2568
I somehow didn't manage to run the query with CAST
. I was always getting Error Code: 1064 near "DECIMAL"
(or other numeric type that I chose). So, I found another way to sort varchar
as numbers:
SELECT *
FROM mytable
ORDER BY ABS(mycol)
A bit simpler and works in my case.
Upvotes: 66
Reputation: 304
You Can Order varchar field using this code according to your required
SELECT * FROM mytable ORDER BY ABS(mycol)
Upvotes: 4