2015-11-19 3 views
0

Я пытаюсь заказать номер столбца в моей базе данных, который имеет значения 0-1000 и включает десятичные числа.SQL для заказа по номеру

Когда я использую

ORDER BY len([FY14 Points]), [FY14 Points] 

я ...

0 
48 
150 
249 
36.9 
39.7 
44.5 
52.5 
54.4 
57.9 
58.4 
60.1 

Я также попытался ...

ORDER BY registration_no * 1 ASC

Но получить это ...

Msg 245, Уровень 16, Состояние 1, Строка 6

Ошибка преобразования при преобразовании значения var88 '88 .4 'в тип данных int.

Кто-нибудь знает, что я могу сделать, чтобы обойти это?

+0

Почему вы используете ORDER BY len ([FY14 Points]), [FY14 Points]? Это упорядочивает значения по длине (количество символов) - я предполагаю, что вы хотите, чтобы эти значения упорядочивались численно? – Nathan

ответ

0

Измените тип данных столбца [FY 14 POINTS] с varchar на int или десятичный тип данных.

0

Мог бы попробовать лить registration_no в decimal: ORDER BY CAST (registration_no as DECIMAL) * 1 ASC. Однако ответ HBMirza будет гораздо лучшим подходом.

Проблема с ORDER BY len ([FY14 Points]), [FY14 Points] - это упорядочение по длине значения в столбце.

0

Вы должны сначала преобразовать это в десятичный тип данных. Вы можете попробовать to_decimal для этого. Затем попробуйте сделать заказ на основе этого.

0

Скайлер,

SQL считает, что вы установили тип данных для [FY14 Points] в varchar. Это то, что вам нужно будет проверить. Когда вы сортируете числа, которые являются varchars, это будет буквально отсортировано в алфавитном порядке, что и есть то, что вы видите. Есть несколько подходов. Можно было бы быть в SELECT Постулаты выберите FY14 Points в явной форме в виде десятичной или междунар, например:

Select columna, columnb, columnc, cast([Fy14 Points] as int) from sometable 

INT может быть заменен любым числовым типом данных вы хотите. Ключевым моментом является то, что для правильной сортировки это должно быть число.

Смежные вопросы