SQL-запрос для сортировки числовых полей

0

У меня есть один столбец типа 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

Как я могу это сделать?

  • 5
    Почему вы даже используете varchar для хранения номеров?
Теги:
sorting
field

4 ответа

6

VARCHAR - это строковый тип, поэтому он упорядочивает их в алфавитном порядке, что является ожидаемым поведением. Если возможно, вы должны изменить столбец на тип числа. Если это невозможно, вы можете присвоить значение числу так:

SELECT... ORDER BY CAST (column_name AS DECIMAL)

Однако это повлияет на вашу производительность, если у вас много строк в вашей базе данных.

  • 2
    И, конечно, это будет работать только в том случае, если в наборе результатов для этого поля нет нечисловых фрагментов данных.
1

Просто добавьте ноль в свое поле без какого-либо преобразования или преобразования:

order by 0+yourfield ASC
  • 0
    Это должно повлиять меньше на производительность
1

Вместо этого вы хотите указать поле как числовое значение, чтобы MySQL заказывал его с помощью числового сравнения, а не с помощью сравнения строк.

SELECT your_column 
FROM your_table 
ORDER BY CAST(your_column AS DECIMAL) ASC

Вышеуказанное будет работать и с отрицательными номерами, если у вас есть какие-либо из них в вашей таблице.

Хотя если поле содержит только числовые данные, вы действительно должны хранить его как таковое, а не как varchar. Приведение в ваш запрос резко повлияет на производительность, так как вы получите больше строк.

1
order by to_number(mycol)

это, конечно, даст ошибку, если одно значение не является числовым. который задает вопрос - почему бы не сделать его числовым столбцом в первую очередь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню