2017-01-06 3 views
0

Благодарим за ваше предложение и помощь. Пример, который вы предоставили, - это почти идеальное описание проблемы. При этом я использовал и отредактировал текст, чтобы помочь описать эту проблему:regexp_substr с LIKE в качестве условия поиска

Я получаю строку, которая содержит цифры с разделителями-запятыми в форме 18656, 16380, 16424 (вызов этого параметра1). Строка содержит только запятые и цифры. В моем столе у ​​меня есть столбец с именем t со значениями, такими как 18656.01.02, 10.02.02, 16380.02.03, 16424.05.66, 16424.55.23.14. Я хочу выбрать все строки, которые соответствуют всем разделенным запятой цифрам в param1; где первый числовой компонент в столбце t подобен 18656, 16380, 16424. Есть ли способ использовать regexp_substr в этом случае.

Где param1 = 18656, 16380, 16424 следующие работы:

select * from mytable where t.mycolumn IN 
    (
    (SELECT regexp_substr(:param1,'[^,]+', 1, level) as NUMLIST 
    FROM DUAL 
    CONNECT BY regexp_substr(:param1, '[^,]+', 1, level) IS NOT NULL) 
    ); 

Как использовать подстановочные знаки, если данные я ищу от t.mycolumn = 18656.00.01, 16380.09.34, 16424.023.8 Может В качестве критериев поиска можно использовать? Если возможно, укажите пример. Очевидно, что следующее не будет работать, но я надеюсь найти решение.

select * from mytable where t.mycolumn LIKE 
    (
    (SELECT regexp_substr(:param1||'%','[^,]+', 1, level) as NUMLIST 
    FROM DUAL 
    CONNECT BY regexp_substr(:param1||'%', '[^,]+', 1, level) IS NOT NULL) 
    ); 
+3

Ясно как грязь. Без использования ЛЮБОГО кода вы можете объяснить проблему? Например: «Я получаю строку, вызываю ее param1. Вот несколько примеров. Строка может содержать запятые, а также может содержать пробелы». (Или нет!) «Кроме того, что это цифры. Теперь в таблице у меня есть столбец со строковыми значениями, например« 1930.2.11 ». Я хочу выбрать строки, в которых первый числовой компонент в значении столбца, например, в 1930 году этот пример соответствует одному из разделенных запятыми чисел в параметре. " Или независимо от вашего требования, просто не используйте какой-либо код, SQL или иначе, чтобы определить проблему. – mathguy

+0

Я согласен с @mathguy. Но, по крайней мере, сообщите нам желаемый результат. Как насчет этого не работает? Каков желаемый результат? –

+0

Дополнительная информация добавлена ​​... – BJC

ответ

0

Предположение:

Существует таблица с именем mytable с колонкой с именем t, который содержит следующие значения:

SELECT * FROM mytable; 

T    | 
---------------| 
18656.01.02 | 
10.02.02  | 
16380.02.03 | 
16424.05.66 | 
16424.55.23.14 | 

Там будет строка, полученной в качестве параметра, который содержит цифры с разделителями-запятыми в форме 18656, 16380, 16424. Строка содержит только запятые и цифры. Эта строка обрабатывается в indyvidual строк с помощью запроса, который похож на на следующие один:

SELECT regexp_substr(param1,'[^,]+', 1, level) as NUMLIST 
FROM ( 
    select '18656,16380,16424' as param1 FROM DUAL 
) 
CONNECT BY regexp_substr(param1, '[^,]+', 1, level) IS NOT NULL 
; 

NUMLIST | 
--------| 
18656 | 
16380 | 
16424 | 

Requirement

Может НРАВИТСЯ быть использованы в качестве критериев поиска? Если возможно, укажите пример .

LIKE ключевого слова используется ниже в качестве условия в JOIN ... ON статьи:

SELECT * FROM mytable 
WHERE t IN (
    SELECT t 
    FROM mytable m 
    JOIN (
      SELECT regexp_substr(param1,'[^,]+', 1, level) as NUMLIST 
      FROM ( 
       select '18656,16380,16424' as param1 FROM DUAL 
      ) 
      CONNECT BY regexp_substr(param1, '[^,]+', 1, level) IS NOT NULL 
    ) x 
    ON m.t LIKE '%' || x.NUMLIST || '%' 
) 

T    | 
---------------| 
18656.01.02 | 
16380.02.03 | 
16424.05.66 | 
16424.55.23.14 | 
+0

Большое спасибо krokodilko! Работает отлично. – BJC

Смежные вопросы