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

Откуда: Mars
Сообщений: 467
hi all
для отчета нужна выборка по ОКВЭД данные там хранятся в varchar(8)
01.01.01
01.02.01
10.1 .
47.10.1 
задача выбрать определенные промежутки ОКВЭД
например Обрабатывающие производства (15-37) - т.е. нужны ОКВЭД с 15.01.01 по 37.99.99
Как их можно разбить и одекватно отсортировать?
А то запросы типа
Select * from ##OKVD where okvd like '15.%' or okvd like '16.%'.... okvd like '37.%'
весьма громоздкий.
10 дек 09, 13:32    [8046517]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка okved - varchar(8)  [new]
vino
Member

Откуда:
Сообщений: 1191
мож такой сойдет?
Select * from ##OKVD where okvd between '15.' and '37.'
10 дек 09, 13:42    [8046621]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка okved - varchar(8)  [new]
vino
Member

Откуда:
Сообщений: 1191
кстати, правильная сортировка строк не получится, так как
balbes
01.01.01
01.02.01
10.1 .
47.10.1
нужно хотя бы
01.01.01
01.02.01
10. 1.
47.10.1
10 дек 09, 13:46    [8046654]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка okved - varchar(8)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
WHERE
 RIGHT('00'+ISNULL(PARSENAME(okvd,3),''),2)
+RIGHT('00'+ISNULL(PARSENAME(okvd,2),''),2)
+RIGHT('00'+ISNULL(PARSENAME(okvd,1),''),2)
 BETWEEN '150101' AND '379999'
10 дек 09, 13:47    [8046661]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка okved - varchar(8)  [new]
balbes
Member

Откуда: Mars
Сообщений: 467
hi vino
between '15.' and '37.'
канает как нистранно...
пока устроит так. :) насчет того, что не достоверен согласен.
СПАСИБО.

hi iap
WHERE
 RIGHT('00'+ISNULL(PARSENAME(okvd,3),''),2)
+RIGHT('00'+ISNULL(PARSENAME(okvd,2),''),2)
+RIGHT('00'+ISNULL(PARSENAME(okvd,1),''),2)
 BETWEEN '150101' AND '379999'
Что то страшное, не совсем понимаю, как работает сейчас попробую обкатать, СПАСИБО.
10 дек 09, 14:01    [8046764]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка okved - varchar(8)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
balbes
hi iap
WHERE
 RIGHT('00'+ISNULL(PARSENAME(okvd,3),''),2)
+RIGHT('00'+ISNULL(PARSENAME(okvd,2),''),2)
+RIGHT('00'+ISNULL(PARSENAME(okvd,1),''),2)
 BETWEEN '150101' AND '379999'
Что то страшное, не совсем понимаю, как работает сейчас попробую обкатать, СПАСИБО.
Поправка:
WHERE
 RIGHT('00'+PARSENAME(REPLACE(REPLACE(S,'.','.0'),' ',''),3),2)
+RIGHT('00'+PARSENAME(REPLACE(REPLACE(S,'.','.0'),' ',''),2),2)
+RIGHT('00'+PARSENAME(REPLACE(REPLACE(S,'.','.0'),' ',''),1),2)
 BETWEEN '150101' AND '379999'
balbes
hi vino
between '15.' and '37.'
канает как нистранно...
пока устроит так. :) насчет того, что не достоверен согласен.
СПАСИБО.
Действительно странно. Ведь '37.99.99' в эту выборку не попадёт.
Если интересуют только границы, приведённые в первом посте, и больше никакие, то вот так лучше:
okvd > '15.' and okvd < '38.'
IMHO
10 дек 09, 14:21    [8046922]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка okved - varchar(8)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Вместо S в моём последнем посте надо поставить okvd
10 дек 09, 14:23    [8046939]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка okved - varchar(8)  [new]
vino
Member

Откуда:
Сообщений: 1191
iap
Если интересуют только границы, приведённые в первом посте, и больше никакие, то вот так лучше:
okvd > '15.' and okvd < '38.'
IMHO
Согласен
10 дек 09, 14:26    [8046972]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка okved - varchar(8)  [new]
balbes
Member

Откуда: Mars
Сообщений: 467
hi iap & vino
огромное СПАСИБО
Там где выборка ограничена только первыми значениями 50-55 использую
okvd > '15.' and okvd < '38.'
в остальных более глубоких
WHERE
 RIGHT('00'+PARSENAME(REPLACE(REPLACE(okved,'.','.0'),' ',''),3),2)
+RIGHT('00'+PARSENAME(REPLACE(REPLACE(okved,'.','.0'),' ',''),2),2)
+RIGHT('00'+PARSENAME(REPLACE(REPLACE(okved,'.','.0'),' ',''),1),2)
 BETWEEN '150101' AND '379999'
еще раз СПАСИБО!
11 дек 09, 07:20    [8050246]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить