powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите с запросом
6 сообщений из 6, страница 1 из 1
Помогите с запросом
    #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
Помогите с запросом
    #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
Помогите с запросом
    #34082534
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, мой предыдущий пост не в тему - я еще не проснулся ;)
...
Рейтинг: 0 / 0
Помогите с запросом
    #34082542
_makSim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ещё:
patindex
Описание: Возвращает начальную позицию первого вхождения указанного образца в строку.
...
Рейтинг: 0 / 0
Помогите с запросом
    #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
Помогите с запросом
    #34083183
W357
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, ошибочка...
символ '^' в patindex не нужен и конструкция должна быть такой:
Код: plaintext
patindex('%[-_]%','12_80')- 1 
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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