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 |