Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите с запросом / 6 сообщений из 6, страница 1 из 1
26.10.2006, 10:08
    #34082380
W357
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Adaptive Server Enterprise/12.5.2/EBF 11796/P/Compaq Tru64/OSF1 V5.0A/ase1252/1831/64-bit/FBO/Fri Apr 9 10:52:27 2004

Код: plaintext
1.
2.
select r.Region from Regions r 
where convert(varchar( 2 ),r.Region)=substring('12_80', 1 , 2 ) or convert(varchar( 2 ),r.Region)=substring('12_80', 1 , 1 )

Этот запрос стоит в качестве одного из полей другого запроса и вместо строковых значений туда подставляются значения поля из внешнего запроса. Данный запрос должен выдавать единичное значение, а выдает два...
т.к. регионы бывают с номерами меньше 10 и соответственно substring вытаскивает из '12_80' значения '1' и '12' и оба таких региона имеются. Нужен конечно только тот что '12'. Две выборки substring делаются потому что бывают строки вида '2_34', '5-54' и т.п. символ разделитель может быть '_' и '-'.
У меня голова не варит, как это сделать.
...
Рейтинг: 0 / 0
26.10.2006, 10:42
    #34082529
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
W357Adaptive Server Enterprise/12.5.2/EBF 11796/P/Compaq Tru64/OSF1 V5.0A/ase1252/1831/64-bit/FBO/Fri Apr 9 10:52:27 2004

Код: plaintext
1.
2.
select r.Region from Regions r 
where convert(varchar( 2 ),r.Region)=substring('12_80', 1 , 2 ) or convert(varchar( 2 ),r.Region)=substring('12_80', 1 , 1 )

Этот запрос стоит в качестве одного из полей другого запроса и вместо строковых значений туда подставляются значения поля из внешнего запроса. Данный запрос должен выдавать единичное значение, а выдает два...
т.к. регионы бывают с номерами меньше 10 и соответственно substring вытаскивает из '12_80' значения '1' и '12' и оба таких региона имеются. Нужен конечно только тот что '12'. Две выборки substring делаются потому что бывают строки вида '2_34', '5-54' и т.п. символ разделитель может быть '_' и '-'.
У меня голова не варит, как это сделать.
у вас во втором сабстринге третий параметр - единица.
насколько я помню, это кол-во символов, которые берутся из строки.
Предлагаю поменять на двойку, как собб-сно и в первом сабстринге.
...
Рейтинг: 0 / 0
26.10.2006, 10:44
    #34082534
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
сорри, мой предыдущий пост не в тему - я еще не проснулся ;)
...
Рейтинг: 0 / 0
26.10.2006, 10:45
    #34082542
_makSim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Есть ещё:
patindex
Описание: Возвращает начальную позицию первого вхождения указанного образца в строку.
...
Рейтинг: 0 / 0
26.10.2006, 12:32
    #34083099
W357
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
_makSimЕсть ещё:
patindex
Описание: Возвращает начальную позицию первого вхождения указанного образца в строку.
Спасибо, помогло!
Код: plaintext
1.
select r.Region from Regions r 
where convert(varchar( 2 ),r.Region)=substring('12_80', 1 ,patindex('[^-_]%','12_80')+ 1 )

Заодно выяснилось что подзапрос ненужен, можно просто делать так:
Код: plaintext
convert(numeric( 2 ), substring('12_80', 1 ,patindex('[^-_]%','12_80')+ 1 ))
...
Рейтинг: 0 / 0
26.10.2006, 12:47
    #34083183
W357
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Упс, ошибочка...
символ '^' в patindex не нужен и конструкция должна быть такой:
Код: plaintext
patindex('%[-_]%','12_80')- 1 
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите с запросом / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]