在 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
);
我正在使用 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
);