2014-08-20 1 views
0

У меня есть таблица элементов, каждая из которых имеет идентификатор элемента (int). Я хочу показывать только элементы с идентификатором элемента на основе строки. Например, я хочу отображать элементы «12, 1005, 2». Эта строка отличается каждый раз. Как мне это сделать?SQL Как показывать только поля из списка чисел

+0

Точно так же строка содержит разделенные запятыми ints и вы хотите найти все записи с эти идентификаторы? –

+0

Да, это именно так. – Kevin

+0

Какой DBM S вы используете? Postgres? Oracle? –

ответ

0

Если вы используете Oracle, вы можете использовать IN:

select from item i where i.id in (12,1005,2) 
+0

Как бы я использовал строку? Если у меня есть 'string a =" 12,1005,2 "', как я могу использовать это в запросе sql? – Kevin

+0

Неравномерный подход (с точки зрения производительности) может быть «%», «||» to_char (i.id) || ',%' like ',' || '12, 1005,2 '||', ' –

+0

I не знаю, в чем проблема, которую вы пытаетесь решить, но я думаю, что лучше обрабатывать строку в вашем приложении. Можете ли вы использовать Execute Immediate? Вы можете сконфигурировать sql -> «select from item i, где i.id in (« с вашей строкой, а затем использовать немедленное выполнение запроса. – AndreDuarte

0

является ваш параметр всегда состоит из 3-х цифр, или он может быть различным во время выполнения ?? если он исправлен, вы можете использовать substr и instr для резки

+0

Я считаю, что во время выполнения может быть другим. – Kevin

0

Я бы рассмотрел подход, задокументированный Джастином Кейв, с вопросом, How can I select from list of values in Oracle. Том Ките документирует аналогичный подход (без регулярных выражений) на сайте Ask Tom.

Поскольку вы находитесь в среде Oracle Apps с помощью Oracle Reports, я просто привести пример с использованием элементов таблицы:

with x as 
    (select '12, 1005, 2' str from dual 
) 
select * 
from inv.mtl_system_items_b item 
where item.organization_id = 
    &org_id 
and item.inventory_item_id in 
    (select to_number(regexp_substr(str,'[^,]+',1,level)) element 
    from x 
    connect by level <= length(regexp_replace(str,'[^,]+')) + 1 
) 

процедурно в Oracle Reports, можно создать функцию в виде программного модуля, который выполняет эту синтаксический разбор этого параметра с разделителями-запятыми с использованием аналогичной логики (опять же, см. функцию списка парсинга Justin Cave (ответ, связанный с вопросом, который я упоминал выше).