Ответ 1
Используйте функцию CAST или CONVERT.
У меня есть столбец типа varchar, который хранит много разных чисел. Скажем, например, есть 3 строки: 17.95, 199.95 и 139.95.Как я могу сортировать это поле как числа в mysql
Используйте функцию CAST или CONVERT.
Самый быстрый, самый простой? используйте * 1
select *
from tbl
order by number_as_char * 1
Другими причинами использования * 1
являются то, что он может
Если вам нужно отсортировать столбец char , содержащий текст AND numbers, тогда вы можете сделать это.
tbl содержит: 2,10, a, c, d, b, 4,3
select * from tbl order by number_as_char * 1 asc, number_as_char asc
ожидаемый результат: 2,3,4,10, a, b, c, d
Если вы не добавите второй порядок по аргументу, будут отсортированы только цифры - текст фактически игнорируется.
Поместите строку с ведущими нулями:
ORDER BY LPAD(`column`,<max length of string>,"0")
Если вам действительно нужно это сделать, если ваши исходные данные совместимы:
SELECT column FROM table ORDER BY CAST(column AS DECIMAL(10,2))
Однако для больших наборов данных это будет не очень быстро. Если вы можете, вы должны изменить схему, чтобы использовать DECIMAL
, в первую очередь. Затем он может быть правильно проиндексирован для лучшей производительности.
Этот подход полезен при сортировке текста в виде чисел:
SELECT `my_field`
FROM `my_table`
ORDER BY `my_field` + 0;
Нашел решение на http://crodrigues.com/trick-mysql-order-string-as-number/.