How to Order a SQL String Column By Its Numeric Value
Suppose we have a VARCHAR
column in SQL that holds numbers: "1", "3", 2"
.
Because the numbers are stored as strings, the ORDER BY
clause does not order by the numeric value of the string.
Ideally, we can change the data type to be a number; however, that’s not always possible.
There are two main ways to order a SQL string column by its numeric value.
Explicit Ordering
We can explicitly cast the column value to a number.
SELECT col_name FROM table_name
ORDER BY cast(col_name AS unsigned); -- signed works too
In Oracle SQL, we can cast using to_number()
;
SELECT col_name FROM table_name
ORDER BY to_number(col_name);
Implicit Ordering
Or we can implicitly cast it to a number using some mathematical operation that will force the conversion to a number.
Any operation that will maintain the identity and value of the original number is acceptable.
We can add zero.
SELECT col_name FROM table_name
ORDER BY col_name + 0;
We can multiply by one.
SELECT col_name FROM table_name
ORDER BY col_name * 1;
We can take the absolute value.
SELECT col_name FROM table_name
ORDER BY ABS(col_name);