Номер строки сортировки mysql

У меня есть столбец типа varchar, который хранит много разных чисел. Скажем, например, есть 3 строки: 17.95, 199.95 и 139.95.Как я могу сортировать это поле как числа в mysql

6 ответов

Используйте функцию CAST или CONVERT.


Самый быстрый, самый простой? используйте * 1

select *
from tbl
order by number_as_char * 1

Другими причинами использования * 1 являются то, что он может

  • выдержать некоторые ужасающие неудачи с недостаточным потоком (уменьшенная десятичная точность при выборе того, что делать)
  • работает (и игнорирует) столбцы чисто нечисловых данных
  • разделяет числовые части буквенно-цифровых данных, таких как 123A, 124A, 125A


Если вам нужно отсортировать столбец 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")
</max>


Если вам действительно нужно это сделать, если ваши исходные данные совместимы:

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/.

licensed under cc by-sa 3.0 with attribution.