我需要在报告工具中为提示编写一个sql。我得到一个由' - '分隔的变量中的多个值的列表,这些值的数量可以变化。(例如,“abc-def”eg2。“abc-def-xyz”)。
现在我需要在这种形式的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中使用我选择的变量,或者报告工具可能不支持。
提前致谢。
答案 0 :(得分:6)
尝试
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
答案 1 :(得分:1)
首先使用Oracle的regexp_substr()函数将字符串拆分为其部分。请参阅regexp_substr function(如果您可以访问生成字符串的原始文件,请使用它。)
其次,把它放在临时表中然后只有:
select something
from somewhere
where someColumn in (select parts from tmpTable)
答案 2 :(得分:1)
select something
from somewhere
where INSTR('-'||'abc-def-ghi'||'-', '-'||someColumn||'-') > 0;
答案 3 :(得分:0)
如果您只想要一个包含' - '的结果列表,您可以执行类似
的操作从SOMECOLUMN喜欢的某个地方选择某些东西('% - %');