2017-01-13 9 views
-1

これは専門家にとっては簡単な質問です。コンマで区切られた入力としてのデコードを使用

ここが私の必要条件です。 DECODEを使用し、コンマ区切りの値を含む文字列と一致させる必要があります。ここ

サンプルSQLある: 'A'テーブルからの列の値である、 'A,B'C'がカンマで区切られた文字列CSV発現が 'A'を含有するようにtrueを返す

SELECT DECODE('A' , 'A,B,C', 'true', 'false') FROM DUAL; 

上記SQLをSQLする式として渡されます。

私はこのSQL

+1

なぜあなたはこれにDECODEを使用する必要がありますか? (本当にしなければなりませんか?)また、入力と表の値はすべて1文字ですか?または、 'A'と 'A、BC、X、YS'の文字列を比較する必要がありますか?後者の場合は、 'instr'または何らかの並べ替えだけのregexpに基づいた解決策に注意してください。文字「L」は入力「ABC、KLM、XY」にあります。これはおそらくあなたが望むものではありません。 – mathguy

答えて

0

文字列が別の文字列内にあるかどうかを判断しようとしていますか?

select case when instr('A,B,C', 'A') > 0 
     then 'True' 
     else 'False' 
     end 
from dual 

DECODEバージョンDECODEを使用して

select decode(instr('A,B,C', 'A'), 0, 'False', 'True') 
    from dual 
+0

ありがとうございますが、私たちはDECODEを使用して達成できますか?これは、DECODEが以前は唯一の値を持つ既存のsqlで使用しているためです。しかし値はコンマで区切られた文字列 –

+0

BobCに感謝します。 DECODEステートメントで、「A」(列の値)を最初に、式(カンマ区切りの値)を2番目に持つSQLを私に提供していただきありがとうございます。これは私のSQL全体がどのように構築され、私は多くを変更したくないのです –

+0

この例は、誤った結果を返しました '' DEC SELECT DECODE(INSTR( 'BA、C、D'、 'A')、0、 'False' True ')FROM DUAL code' –

1

ファーストを書いて助けてください、decode()を使用しないでください。 ANSI標準CASEステートメントを使用します。

SELECT (CASE WHEN ',' || 'A,B,C' || ',' LIKE '%,' || 'A' || ',%'   
      THEN 'true' ELSE 'false' 
     END) 
FROM DUAL; 

注:文字列の連結は、私は値が変数である疑いがあるという理由だけであなたの質問への答えは、あなたがLIKEを使用することができるということです。より簡単な形式は次のとおりです。

SELECT (CASE WHEN ',A,B,C,' LIKE '%,A,%'   
      THEN 'true' ELSE 'false' 
     END) 
FROM DUAL; 
0

を追加し、あなたはこのようにそれを行うことができます:列の値は、コンマでない場合 INSTR('Comma separated string', 'column value to match')は0を返します

SELECT DECODE(INSTR('A,B,C', 'A'), 0, 'false', 'true') FROM DUAL; 

分離された文字列。あなたの例では、 INSTR('A,B,C', 'A')は0より大きい値を返し、INSTR('D,B,C', 'A')は0を返します。したがって、DECODEはINSTR()の戻り値が0かどうかをチェックし、そうでなければtrueを返します。

+0

ありがとうございました。ただし、カンマで区切られた文字列は常にSELECT DECODE( 'A'、 'A、B、C'、 'true'、 'false')FROM DUAL –

+0

この例では誤った結果を与えました 'code' SELECT DECODE(INSTR( 'BA、C、D'、 'A' )、0、 'False'、 'True')FROM DUAL 'code –

関連する問題