У меня есть один столбец типа VARCHAR
, который хранит числа, такие как 10, 11, 16.5, 24, 43, 12, 100 и т.д.
Я хочу заказать эти поля, но он выглядит следующим образом:
10
11
12
16.5
100
24
43
И мне нужен этот результат:
10
11
12
16.5
24
43
100
Как я могу это сделать?
VARCHAR
- это строковый тип, поэтому он упорядочивает их в алфавитном порядке, что является ожидаемым поведением. Если возможно, вы должны изменить столбец на тип числа. Если это невозможно, вы можете присвоить значение числу так:
SELECT... ORDER BY CAST (column_name AS DECIMAL)
Однако это повлияет на вашу производительность, если у вас много строк в вашей базе данных.
Просто добавьте ноль в свое поле без какого-либо преобразования или преобразования:
order by 0+yourfield ASC
Вместо этого вы хотите указать поле как числовое значение, чтобы MySQL заказывал его с помощью числового сравнения, а не с помощью сравнения строк.
SELECT your_column
FROM your_table
ORDER BY CAST(your_column AS DECIMAL) ASC
Вышеуказанное будет работать и с отрицательными номерами, если у вас есть какие-либо из них в вашей таблице.
Хотя если поле содержит только числовые данные, вы действительно должны хранить его как таковое, а не как varchar. Приведение в ваш запрос резко повлияет на производительность, так как вы получите больше строк.
order by to_number(mycol)
это, конечно, даст ошибку, если одно значение не является числовым. который задает вопрос - почему бы не сделать его числовым столбцом в первую очередь.