• ベストアンサー

Oracleのnull

ちょっとオラクルの検索文で困ったことがでてきました。 temp ------- col1 col2 col3 と言うようなテーブルがあります。 select col1 || '(' || col2 || ')' as col from temp; というような検索文を作成しましたが、テーブルのcol1とcol2が両方とも nullのデータは'()'となってしまいます。 col1とcol2は片方だけがnullと言うことはありません。 col1がnullの場合はcol2もnullです。 このような場合col1とcol2がnullの時は、結果のcolもnullにしたいのですが どうしたら出来るのでしょうか? また、無理なら無理と教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • takopon
  • ベストアンサー率69% (27/39)
回答No.2

少々面倒ですが、DECODE関数を使ってみたらどうでしょうか。 DECODE関数は条件置換を行うことの出来る関数です。 DECODE(COL,'A',1,'B',2,3) とかくと、COLの値が'A'のときは1、'B'のときは2、それ以外は3 が返されます。 ですので、 select col1 || decode(col2,null,null,'(') || col2 || decode(col2,null,null,')') as col from temp; でうまくnullになるのではないでしょうか。 decodeはネストすることも出来ますので、 select col1 || decode(col1,null,decode(col2,null,null,'('), null,'(') || col2 || decode(col1,null,decode(col2,null,null,'('), ,')') as col from temp; でさらに正確に置換することが出来ます。 こんなところでどうでしょうか。

hilo256
質問者

お礼

有難うございます。詳しい説明でわかりやすかったです。

その他の回答 (1)

  • timber
  • ベストアンサー率29% (218/739)
回答No.1

select decode(col1, null, null, col1 || '(' || col2 || ')' ) as col from temp; 上記でできると思います。

hilo256
質問者

お礼

有難うございます。オラクルって本当に便利ですね。

関連するQ&A