![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ORDER BY [D7, MSSQL]
VadimSpb © (2006-05-04 02:11:00)Добрый день!
Сортирую целые числа "... ORDER BY Flat"
Получаю:
0
4
44
456
5
Сделал иначе: "... ORDER BY CAST(Flat AS DOUBLE PRECISION)"
Получил как и нужно:
0
4
5
44
456
Почему такая "беда" при сортировке целых чисел в первом варианте?
ANB (2006-05-06 13:30:00) [21]Имхо. Странно, дома с буквами бывают, а вот про квартиры я не слышал.
Johnmen (2006-05-06 13:23:00) [22]
> Desdechado © (06.05.06 13:04) [17]
Не всё так просто. Чисто № не может задавать порядок, т.к. надо ещё учитывать 5A ? 5B.
> Genry (06.05.06 13:05) [18]
Неверно.
Genry (2006-05-06 13:05:00) [23]
> Genry (06.05.06 13:01) [16]
Че-то я усложнил как-то :-)))
select Replicate('0', Col_Length('<Table>', '<Column>') - Len(<Column>)) + Column as TmpName,
<Column> as Name
from Table order by TmpName
Desdechado (2006-05-06 13:04:00) [24]я бы сделал UDF, которая возвращает строго число из номера квартиры (это порядок сортировки)
сделал бы по UDF вычисляемое поле и индекс по этому полю
Genry (2006-05-06 13:01:00) [25]
> VadimSpb (06.05.06 12:34) [13]
попробуй, скорость правда будет невысокая
select Replicate('0', Col_Length('<Table>', '<Column>') - Len(<Column>)) + Column as TmpName,
Right(Replicate('0', Col_Length('<Table>', '<Column>') - Len(<Column>)) + Column, Len(<Column>)) as Name
from Table order by TmpName
Поле TmpName - дополненное нулями, используемое в Order By
Поле Name, уже с обрезанными нулями, его и используем на клиенте
Ega23 (2006-05-06 12:44:00) [26]Добавить ещё одно целочисленное поле "Порядок сортировки" и сортировать уже по нему.
Sergey13 (2006-05-06 12:37:00) [27]2[13] VadimSpb (06.05.06 12:34)
Так почему 2 поля не обеспечат нужное?
VadimSpb (2006-05-06 12:34:00) [28]На выходе надо
1
3
5А
333
а не
1
3
333
5А
Можно просто добавлять нули, но как показывает практика требовать это от пользователя нереально, лучше самому программно.
Genry (2006-05-06 12:34:00) [29]
> VadimSpb (06.05.06 12:26) [9]
> > Особенно интересна ситуация 4a5b7c
>
> Как кто решает эту проблему?
Для начала надо в голове понять, в какой позиции должно стоять это (4a5b7c) в отсортированном списке квартир
Вполне возможно, что способ [7] вполне подойдет.
Sergey13 (2006-05-06 12:30:00) [30]2[9] VadimSpb (06.05.06 12:26)
> Просто использовать 2 поля неполучится:
Почему? В номерах квартир реально встречаются 4a5b7c?
Johnmen (2006-05-06 12:30:00) [31]
> Как кто решает эту проблему?
В зависимости от того, что требуется на выходе. Т.е. какова логика.
VadimSpb (2006-05-06 12:26:00) [32]
> Разделить 1 поле на 2 составляющих поля с соответстующими
> типами.
Просто использовать 2 поля неполучится:
> Особенно интересна ситуация 4a5b7c
Как кто решает эту проблему?
Johnmen (2006-05-06 12:23:00) [33]Особенно интересна ситуация 4a5b7c
:)))
Genry (2006-05-06 12:22:00) [34]
> VadimSpb (06.05.06 12:16) [5]
> Как совместить возможность использования цифр и букв с возможностью
> "цифровой" сортировки?
При записи в базу дополнять слева нулями до общей длины поля.
Соотв. при отображении на клиенте придется немного пошаманить
Sergey13 (2006-05-06 12:19:00) [35]2 [5] VadimSpb (06.05.06 12:16)
Разделить 1 поле на 2 составляющих поля с соответстующими типами.
VadimSpb (2006-05-06 12:16:00) [36]Если будут буквы, конечно падает.
Как совместить возможность использования цифр и букв с возможностью "цифровой" сортировки?
Desdechado (2006-05-04 12:50:00) [37]> ORDER BY CAST(Flat AS DOUBLE PRECISION)
на буквочках не падает?
VadimSpb (2006-05-04 08:55:00) [38]Точно - строковый. Забыл, что когда-то номера квартир сделал строками - иногда буквы попадаются.
Сорри, вопрос закрыт, тему в корзину. Посыпаю голову пеплом.
Anatoly Podgoretsky (2006-05-04 08:48:00) [39]Врешь, ты сортируешь строковые поля
Плохиш (2006-05-04 02:34:00) [40]Тип поля строковый?