powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / retrieve argument в in
16 сообщений из 16, страница 1 из 1
retrieve argument в in
    #34924908
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
случайно никто не реализовывал такую вещь -

в датавинде есть ретрайв аргумент типа string (a_arg) и хочу передавать туда вот такую строку:
'(1,2,3,4,5,6)' или '1,2,3,4,5,6'
как можно потом вставить такой аргумент в WHERE после IN?
...
Рейтинг: 0 / 0
retrieve argument в in
    #34924935
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то типа такого (для MS SQL)
Код: plaintext
where patindex(','+cast(field as varchar( 255 ))+',',:a_arg) >  0 
а сам a_arg писать типа ',1,2,3,4,5,6,'
patindex - это функция возвращающая позицию подстроки в строке
...
Рейтинг: 0 / 0
retrieve argument в in
    #34924960
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо patindex следует читать charindex
...
Рейтинг: 0 / 0
retrieve argument в in
    #34924962
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Маркчто-то типа такого (для MS SQL)
Код: plaintext
where patindex(','+cast(field as varchar( 255 ))+',',:a_arg) >  0 
а сам a_arg писать типа ',1,2,3,4,5,6,'
patindex - это функция возвращающая позицию подстроки в строке
patindex - что? для Оракла случайна аналог неизвестен?
...
Рейтинг: 0 / 0
retrieve argument в in
    #34924966
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркВместо patindex следует читать charindex
а понятно :)
...
Рейтинг: 0 / 0
retrieve argument в in
    #34925074
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл еще сказать, что это может оказаться не слишком быстро по скорости выполнения запроса.
...
Рейтинг: 0 / 0
retrieve argument в in
    #34925380
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аналог in для строк это like,отсюда и двигаемся.
Аргумент обкладываете запятыми dw.retrieve(','+arg+','),а в where обкладывете процентами и запятыми выдвигаемое на сравнение,поле
Код: plaintext
1.
where '%,'+field+',%' like :arg
Обложение нужно,чтобы уравнять в правах крайние и внутренние значения.
Индекс по полю работать не будет.
...
Рейтинг: 0 / 0
retrieve argument в in
    #34925473
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, только все наоборот
Код: plaintext
where :arg like '%,'+field+',%'
...
Рейтинг: 0 / 0
retrieve argument в in
    #34925515
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно передавать не строку, а массив (number array), в запросе написать:
Код: plaintext
... where col1 in (:arg)
...
Рейтинг: 0 / 0
retrieve argument в in
    #34925545
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это уже предлагал, сказал что не то
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
retrieve argument в in
    #34925586
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да,справедливая поправка.
...
Рейтинг: 0 / 0
retrieve argument в in
    #34926189
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кому мож пригодится... вариант для Оракла, отрабатывает на ура

Код: plaintext
1.
2.
3.
4.
5.
6.
where field in
(
select    substr(str, instr (str, ',',  1 , level  ) +  1 ,
          instr (str, ',',  1 , level+ 1 ) - instr (str, ',',  1 , level) - 1  ) as token    
        from (select ','||v_arg||',' str from dual)  
        connect by level <= length(v_arg)-length(replace(v_arg,',',''))+ 1 ))
)
...
Рейтинг: 0 / 0
retrieve argument в in
    #34929639
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или еще проще оказывается можно :)

Код: plaintext
where ','||:a_arg||',' like '%,'||field||',%'
...
Рейтинг: 0 / 0
retrieve argument в in
    #34930167
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRили еще проще оказывается можно :)
А что собственно предложил KOLCHOZ_POSTEVENT а я исправил? Но вариант с connect by может быть предпочтительней, т.к. (IMHO) оставляет возможность использовать индекс по field (если преобразовать подстроку в число).
...
Рейтинг: 0 / 0
retrieve argument в in
    #34931622
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк VanoRили еще проще оказывается можно :)
А что собственно предложил KOLCHOZ_POSTEVENT а я исправил? Но вариант с connect by может быть предпочтительней, т.к. (IMHO) оставляет возможность использовать индекс по field (если преобразовать подстроку в число).

полохо смотрел :)
тока к a_arg надо запятые со сторон добавить еще... иначе неправильные сведения выдаст.
...
Рейтинг: 0 / 0
retrieve argument в in
    #34931683
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRтока к a_arg надо запятые со сторон добавить еще... иначе неправильные сведения выдаст.
Локшин Марка сам a_arg писать типа ',1,2,3,4,5,6,'
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / retrieve argument в in
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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