Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сортировка по номеру дома  [new]
Stok
Member

Откуда:
Сообщений: 44
Имеем поле Varchar(20) с номерами дома.
Как выполнить оптимальную с точки зрения ресурсов (т.е. не опускаясь до посимвольного анализа) сортировку по их возрастанию, т.е.
1

5
9/16
11
25Б
хххх (так обозначен "пустой" номер)
20 апр 04, 10:07    [637230]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по номеру дома  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Если order by не катит, то можно подумать об изменении структуры данных - например хранить в одном поле номер, во втором буквы, дроби и т.д. и т.п.
20 апр 04, 10:11    [637241]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по номеру дома  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Я сортирую так: Создаю два вычисляемых из номера дома поля:

CAST(LEFT(P.FNAME, PATINDEX('%[^0-9]%', P.FNAME+'a')-1) AS integer) AS SORT1, -- Поле для сортировки номеров домов "как чисел"

CAST(RIGHT(P.FNAME, PATINDEX('%[^0-9]%', REVERSE(P.FNAME)+'a')-1) AS integer) AS SORT2 -- Поле для сортировки номеров корпусов/строений "как чисел"



А потом ORDER BY SORT1, SORT 2 соответственно
20 апр 04, 10:19    [637267]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по номеру дома  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
declare @t table(d varchar(9))


insert @t select '1'
union select '1а'
union select '5'
union select '9/16'
union select '11'
union select '25Б'
union select 'xxxx'
-----------------

select *
from @t
order by convert(int,
case when d like '%[^0-9]%'
then substring(d,1,patindex('%[^0-9]%',d)-1)
else d
end )

Правда хххх (так обозначен "пустой" номер) вначале, но я думаю принцип ясен и при желании можно будет доработать
20 апр 04, 15:18    [638271]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить