Причина этого состоит в том, что с типом данных char, Вы сортируете строки как строку.
идея ORDER BY CAST()
корректна, однако производительность этого понизится как количество возвращенных увеличений результатов.
, Если бы это - только числовые данные в этом столбце, лучшая практика должна была бы найти подходящий числовой тип данных и изменить его.
, Если Вы действительно не можете изменить столбец и Вы имеете проблемы производительности, я предлагаю иметь столбец порядка сортировки, который содержит бросок значения к целому числу (будет аннулировать преобразованный в соответствующее значение).
Индекс столбец порядка сортировки и идеально, добавьте триггер к столбцу CHAR так, чтобы вставил или обновил к символьному триггеру значения обновление целочисленного значения.
Вот простая программа, которая позволяет вам проверить код. Помните о параметре MidpointRounding, без него вы получите округление до ближайшего четного числа, что в вашем случае означает разницу в пять (в примере 72,5).
class Program
{
public static void RoundToFive()
{
Console.WriteLine(R(71));
Console.WriteLine(R(72.5)); //70 or 75? depends on midpoint rounding
Console.WriteLine(R(73.5));
Console.WriteLine(R(75));
}
public static double R(double x)
{
return Math.Round(x/5, MidpointRounding.AwayFromZero)*5;
}
static void Main(string[] args)
{
RoundToFive();
}
}