假设我有一个字符串' 1,2,3'
我想标记字符串并将每个标记转换为NUMBER。所以上面的字符串将被标记为:
1 NUMBER
2 NUMBER
3 NUMBER
最后的意图是在查询中将它们用作IN子句的一部分,如下所示:
从样本中选择*,其中键入(1,2,3);
我怎样才能做到这一点?这里的一个重点是字符串在不同情况下可以具有不同数量的令牌。所以它可以是' 1,2,3'或者' 1,2'或者' 1,2,3,4'甚至' 1'。
请帮帮我们。
提前致谢。
答案 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 || ',%'