如何在Oracle中标记化字符串并将每个标记转换为NUMBER以在查询中将它们用作IN子句的一部分?

时间:2014-03-26 05:55:00

标签: sql oracle

假设我有一个字符串' 1,2,3'

我想标记字符串并将每个标记转换为NUMBER。所以上面的字符串将被标记为:

        1      NUMBER
        2      NUMBER
        3      NUMBER

最后的意图是在查询中将它们用作IN子句的一部分,如下所示:

从样本中选择*,其中键入(1,2,3);

我怎样才能做到这一点?这里的一个重点是字符串在不同情况下可以具有不同数量的令牌。所以它可以是' 1,2,3'或者' 1,2'或者' 1,2,3,4'甚至' 1'。

请帮帮我们。

提前致谢。

2 个答案:

答案 0 :(得分:0)

请尝试:

with test as 
(
    select '1,2,3' str from dual  
)  
select * from sample 
where type in(
      select regexp_substr (str, '[^,]+', 1, rownum) split  
      from test  
      connect by level <= length (regexp_replace (str, '[^,]+'))  + 1);

答案 1 :(得分:0)

根据您的操作,将id转换为String并在String中查找它可能会更快。只需在列表的开头和结尾添加逗号即可。

SELECT id
  FROM (SELECT 1 AS id FROM DUAL
        UNION
        SELECT 2 FROM DUAL
        UNION
        SELECT 3 FROM DUAL) idtable
 WHERE ',' || '1,3,4,5' || ',' LIKE '%,' || idtable.id || ',%'