У меня есть номера, сохраненные в VARCHAR
базе данных MySQL. Я не могу сделать их INT
из-за некоторых других обстоятельств.
При сортировке они воспринимаются как символы, а не как числа.
В базе данных у меня есть
1 2 3 4 5 6 7 8 9 10...
На моей странице он показывает упорядоченный список следующим образом:
1 10 2 3 4 5 6 7 8 9
Как я могу сделать так, чтобы это выглядело упорядоченным по возрастанию номеров?
Ответы:
Если возможно, вам следует изменить тип данных столбца на число, если вы все равно сохраняете числа.
Если вы не можете сделать это затем бросьте ваше значение столбца в
integer
явном виде сили неявно, например, с помощью математической операции, которая вызывает преобразование в число
Кстати, MySQL преобразует строки слева направо. Примеры:
источник
1
decimal
.Другой способ, не используя ни одного актера.
(Для людей, которые используют JPA 2.0, где не разрешается кастинг)
РЕДАКТИРОВАТЬ: работает только для натуральных чисел
источник
Еще один и простой способ
ORDER BY ABS(column_name)
источник
Столбец, с которым я сортирую, имеет любую комбинацию букв и цифр, поэтому я использовал предложения из этого поста в качестве отправной точки и придумал это.
Полученные результаты
Надеюсь это поможет
источник
1 - ISNUMERIC(ID)
вместо,(CASE WHEN ISNUMERIC(ID) = 1 THEN 0 ELSE 1 END)
чтобы изменить 0 на 1 и наоборот.Это работает для меня.
источник
Еще один способ конвертировать.
Если у вас есть строковое поле, вы можете преобразовать его или его числовую часть следующим образом: добавьте начальные нули, чтобы все целые строки имели одинаковую длину.
или упорядочить по части поля что-то вроде «ensymbols13 », «ensymbols1222» и т. д.
источник
Я искал также поля сортировки, которые имеют буквенный префикс. Вот что я нашел решение. Это может помочь тем, кто ищет такое же решение.
Значения поля:
SUBSTRING(field,3,9)
я поставил 9, потому что 9 достаточно для меня, чтобы держать максимум 9 цифр целочисленных значений.Таким образом, результат будет 123456789 123456788 123456787 ... 100 99 ... 2 1
источник
Это будет обрабатывать отрицательные числа, дроби, строки, все:
источник
Это может помочь тем, кто ищет такое же решение.
источник
Если вы используете AdonisJS и имеете смешанные идентификаторы, такие как ABC-202, ABC-201 ..., вы можете объединить необработанные запросы с Query Builder и реализовать решение, описанное выше ( https://stackoverflow.com/a/25061144/4040835 ) следующим образом:
ПРИМЕЧАНИЯ: В этой строке:
SUBSTRING(:sortField:,3,15)*1 ${sortDirection}
,Ссылка 1: Вы можете узнать больше о привязках параметров в необработанных запросах здесь: https://knexjs.org/#Raw-Bindings Ссылка 2: Adonis Raw Queries: https://adonisjs.com/docs/4.1/query-builder# _raw_queries
источник
Измените ваше поле на INT вместо VARCHAR.
Затем исправьте обстоятельства в первую очередь. В противном случае вы работаете вокруг реальной основной проблемы. Использование MySQL CAST является опцией, но она маскирует вашу плохую схему, которая должна быть исправлена.
источник