SQL-запрос для сортировки числовых полей - PullRequest
0 голосов
/ 16 июля 2010

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

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

Ответы [ 4 ]

6 голосов
/ 16 июля 2010

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

ВЫБРАТЬ ... ЗАКАЗАТЬ ПО БРОНИРОВАНИЮ (имя столбца КАК ПОКАЗАТЕЛЬ)

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

1 голос
/ 16 июля 2010

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

order by 0+yourfield ASC
1 голос
/ 16 июля 2010

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

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

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

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

1 голос
/ 16 июля 2010
order by to_number(mycol)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...