0

感谢 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)
    );
4

1 回答 1

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 形式的逗号分隔数字。该字符串仅包含逗号和数字。在类似于以下查询的查询的帮助下,该字符串被解析为单独的行:

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 |
于 2017-01-07T06:26:13.410 回答