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

Convert String List to Number in Oracle DB

我正在使用 Oracle Apex Shuttle 字段 like(3:4:5) 将 table ID 作为外键保存到另一个 table 中。现在我想在使用 IN 子句的 sql 查询中使用这些 IDS。我使用 replace 函数将 : 替换为 , 但它显示

no data found

留言。

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

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

但是当我尝试使用

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

显示未找到数据。

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);

据我了解,您有一个类似 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; 

这将 return:

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
    );