admin

oracle sql中条件条件的动态数

sql

我需要为报表工具中的提示编写sql。我在变量中得到多个值的列表,这些变量之间用“-”分隔,并且这些值的数量可以变化。(例如,1。

现在我需要用这种形式的oracle写sql(逻辑上)

select something
  from somewhere
 where someColumn in 'abc' -- use substr to extract abc
    or someColumn in 'def' -- use substr to extract def
    or ...till we don't find '-'.

我不能使用plsql进行查询。我可能不知道要使用在plsql中选择的变量,或者报告工具不支持该变量。

提前致谢。


阅读 160

收藏
2021-06-07

共1个答案

admin

尝试

select something
  from somewhere
 where someColumn in (select regexp_substr('abc-def-xyz','[^-]+', 1, level) from dual
                     connect by regexp_substr('abc-def-xyz', '[^-]+', 1, level) is not null);

概括(考虑您的字段以“-”分隔)

select something
  from somewhere
 where someColumn in (select regexp_substr(variable,'[^-]+', 1, level) from dual
                     connect by regexp_substr(variable, '[^-]+', 1, level) is not null);

基本上,子查询的输出如下所示-

  SQL> select regexp_substr('abc-def-xyz','[^-]+', 1, level) value from dual
      connect by regexp_substr('abc-def-xyz', '[^-]+', 1, level) is not null;

VALUE                            
-------------------------------- 
abc                              
def                              
xyz
2021-06-07