SQL Oracle PL/SQL 中的列表在哪里?
SQL where in with lists in Oracle PL/SQL?
我有以下 "table1" :
NAME JOB
Mary pilot, astronaut, cook
John astronaut, biker
Michael rider
Rita teacher, doctor
我想 select 所有宇航员或医生。它应该 return 玛丽、约翰和丽塔。
我目前有:
select name from table1
where 'astronaut,doctor' in (select regexp_substr(table1.job,'[^'',]+', 1, level)
from dual
connect by regexp_substr(table1.job, '[^'',]+', 1, level) is not null)
但是,我不想比较左侧的整个字符串,而是想遍历它。
注意:我将左侧参数作为输入参数,因此必须在 sql.
中对其进行解析
您应该修正数据格式。您正试图将列表存储在一列中,这是一个坏主意。您应该使用联结 table 而不是定界值。
有时,我们会被其他人糟糕的设计决定所困。 Oracle 确实有强大的正则表达式运算符。这确实允许:
select name, job
from table1
where regexp_like(job, replace('astronaut,doctor', ',', '|');
我有以下 "table1" :
NAME JOB
Mary pilot, astronaut, cook
John astronaut, biker
Michael rider
Rita teacher, doctor
我想 select 所有宇航员或医生。它应该 return 玛丽、约翰和丽塔。
我目前有:
select name from table1
where 'astronaut,doctor' in (select regexp_substr(table1.job,'[^'',]+', 1, level)
from dual
connect by regexp_substr(table1.job, '[^'',]+', 1, level) is not null)
但是,我不想比较左侧的整个字符串,而是想遍历它。
注意:我将左侧参数作为输入参数,因此必须在 sql.
中对其进行解析您应该修正数据格式。您正试图将列表存储在一列中,这是一个坏主意。您应该使用联结 table 而不是定界值。
有时,我们会被其他人糟糕的设计决定所困。 Oracle 确实有强大的正则表达式运算符。这确实允许:
select name, job
from table1
where regexp_like(job, replace('astronaut,doctor', ',', '|');