regexp_substr с LIKE в качестве условия поиска

Спасибо mathguy за ваше предложение и помощь. Приведенный вами пример является почти идеальным описанием проблемы. Это сказало, что я использовал и отредактировал Ваш текст, чтобы помочь описать эту проблему:

Я получаю строку, содержащую цифры, разделенные запятыми, в виде 18656, 16380, 16424 (назовите это param1). Строка содержит только запятые и цифры. В mytable у меня есть столбец с именем 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 Можно ли использовать LIKE в качестве критерия поиска? Если возможно, приведите пример. Очевидно, что следующее не будет работать, но я надеюсь найти решение.

  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)
    );

1 ответ

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

Есть таблица с именем 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. Строка содержит только запятые и цифры. Эта строка разбирается в отдельные строки с помощью запроса, который похож на следующий:

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   |

требование

Можно ли использовать LIKE в качестве критерия поиска? Если возможно, приведите пример.

Ключевое слово 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 |
Другие вопросы по тегам