2

レポート ツールでプロンプト用の SQL を記述する必要があります。「-」で区切られた変数の複数の値のリストを取得しますが、そのような値の数はさまざまです (eg1."abc-def" eg2."abc-def-xyz")。

今、私はこの形式のオラクルに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で使用することを知らないか、レポートツールがそれをサポートしていない可能性があります。

前もって感謝します。

4

4 に答える 4

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  
于 2012-07-19T03:34:46.717 に答える
1

まず、Oracleのregexp_substr()関数を使用して、文字列をその部分に分割します。regexp_substr関数を参照してください (文字列を生成するオリジナルにアクセスできる場合は、それを使用してください)。

次に、これを一時テーブルに入れて、次のようにします。

select something
  from somewhere
 where someColumn in (select parts from tmpTable)
于 2012-07-19T03:42:56.480 に答える
1
select something
  from somewhere
 where INSTR('-'||'abc-def-ghi'||'-', '-'||someColumn||'-') > 0;
于 2012-07-19T06:18:51.100 に答える
0

「-」を含む結果のリストが必要な場合は、次のようにすることができます

SELECT SOMETHING FROM SOMEWHERE WHERE SOMECOLUMN LIKE ('%-%');

于 2012-07-19T03:23:00.750 に答える