在Oracle DB中将字符串列表转换为数字

时间:2015-10-02 04:40:32

标签: oracle oracle-apex

我使用Oracle Apex Shuttle字段like(3:4:5)将表ID作为外键保存到另一个表中。现在我想使用IN Clause在sql查询中使用这些IDS。我已使用:功能将,替换为replace但显示

  

未找到数据

消息。

当我使用静态值时,以下查询正常工作。

select * from table where day_id IN(3,4,5)

但是当我尝试使用

select * from table where id IN(Select id from table2)

它显示没有找到数据。

2 个答案:

答案 0 :(得分:2)

根据我的理解,你有一个像1:2:3:4这样的列表,你想在IN子句中使用它;您可以将列表转换为单独的值,如下所示:

select regexp_substr('1:2:3:4','[^:]+', 1, level) as list from dual
connect by regexp_substr('1:2:3:4', '[^:]+', 1, level) is not null; 

这将返回:

List
1
2
3
4

然后你可以简单地将它添加到你的查询中:

SELECT *
FROM TABLE
WHERE day_id IN
    (SELECT regexp_substr('1:2:3:4','[^:]+', 1, level) AS list
    FROM dual
        CONNECT BY regexp_substr('1:2:3:4', '[^:]+', 1, level) IS NOT NULL
    );

答案 1 :(得分:0)

Can you try below statement. It has working as you expected.

create table table1 (id number, name varchar2(20));
alter table table1 add constraints pri_cons primary key(id);
create table table2 (id number, name varchar2(20));
alter table table2 add constraints ref_cons FOREIGN KEY(id) REFERENCES table1 (id);
begin
insert into table1 values (1,'Bala');
insert into table1 values (2,'Sathish');
insert into table1 values (3,'Subbu');
insert into table2 values (1,'Nalini');
insert into table2 values (2,'Sangeetha');
insert into table2 values (3,'Rubini');
end;
/
select * from table1 where id IN (Select id from table2);