- ベストアンサー
DECODEの件
こんにちわ。 いまORACLE9iを使用している者です。 SELECT句で"DECODE"を使って, ある項目の値がAとBの間にあるかどうか,という条件で 取得する値を切り替えたいと思い, 下記のようなSQLを書きましたが, エラーになってしまいます。 SELECT DECODE(項目名,BETWEEN A AND B, '2', '1') FROM テーブル名; PLSQLを使用しないで, このようなケースを実現したいのですが, どうすればよいでしょうか? 教えてください。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
手元に確認環境がないので記憶の範囲でお答えします。 確かに decode(項目名, between a and b, ・・・)といった記述はできないと思います。少なくとも Oracle8i まではできませんでした。 もし項目名が数値型であれば decode(sign(項目名 - b), 1, 'bより大きい', decode( sign(項目名 - a), 1, 'aより大きくb以下', 'a以下')) のような書き方はできると思います。
その他の回答 (4)
No.1の回答者です。 検証してみたところDECODEとBETWEENの組合せでは出来ませんでした。 環境が9iと言う事なのでCASE演算子を使われてはいかがでしょうか? SELECT CASE WHEN 項目名 BETWEEN A AND B THEN '2' ELSE '1' END FROM テーブル名; な感じでできると思います。
お礼
ara-kenさん 回答ありがとうございます。 参考にさせて頂きます。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
DECODE(項目名,BETWEEN A AND B, '2', '1')のような式は書けません。 比較する項目が数値であれば、書き方を考えることで可能ですが、文字列の場合は無理です。
お礼
k_o_r_o_c_h_a_nさん 回答ありがとうございます。 参考にさせて頂きます。
- papparapar
- ベストアンサー率66% (2/3)
SELECT DECODE(項目名,BETWEEN A AND B, '2', '1') FROM テーブル名; たぶん SELECT DECODE(項目名,BETWEEN A AND B, '2', '1') A FROM テーブル名; で良いと思います。項目名が不明になっているようです。
お礼
papparaparさん 回答ありがとうございます。 参考にさせて頂きます。
BETWEEN演算子は 式 BETWEEN 式 AND 式 なので BETWEEN A AND B では無く 項目名 BETWEEN A AND B ではないでしょうか?
お礼
ara-kenさん 回答ありがとうございます。 参考にさせて頂きます。
お礼
cool_danceさん 回答ありがとうございます。 参考にさせて頂きます。