感谢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)
);
答案 0 :(得分: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 |
可以像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 |