• ベストアンサー

DECODEの件

こんにちわ。 いまORACLE9iを使用している者です。 SELECT句で"DECODE"を使って, ある項目の値がAとBの間にあるかどうか,という条件で 取得する値を切り替えたいと思い, 下記のようなSQLを書きましたが, エラーになってしまいます。 SELECT DECODE(項目名,BETWEEN A AND B, '2', '1') FROM テーブル名; PLSQLを使用しないで, このようなケースを実現したいのですが, どうすればよいでしょうか? 教えてください。 よろしくお願いします。

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

  • ベストアンサー
回答No.4

手元に確認環境がないので記憶の範囲でお答えします。 確かに decode(項目名, between a and b, ・・・)といった記述はできないと思います。少なくとも Oracle8i まではできませんでした。 もし項目名が数値型であれば decode(sign(項目名 - b), 1, 'bより大きい', decode( sign(項目名 - a), 1, 'aより大きくb以下', 'a以下')) のような書き方はできると思います。

tatsurou
質問者

お礼

cool_danceさん 回答ありがとうございます。 参考にさせて頂きます。

その他の回答 (4)

noname#219128
noname#219128
回答No.5

No.1の回答者です。 検証してみたところDECODEとBETWEENの組合せでは出来ませんでした。 環境が9iと言う事なのでCASE演算子を使われてはいかがでしょうか? SELECT CASE WHEN 項目名 BETWEEN A AND B THEN '2' ELSE '1' END FROM テーブル名; な感じでできると思います。

tatsurou
質問者

お礼

ara-kenさん 回答ありがとうございます。 参考にさせて頂きます。

回答No.3

DECODE(項目名,BETWEEN A AND B, '2', '1')のような式は書けません。 比較する項目が数値であれば、書き方を考えることで可能ですが、文字列の場合は無理です。

tatsurou
質問者

お礼

k_o_r_o_c_h_a_nさん 回答ありがとうございます。 参考にさせて頂きます。

回答No.2

SELECT DECODE(項目名,BETWEEN A AND B, '2', '1') FROM テーブル名; たぶん SELECT DECODE(項目名,BETWEEN A AND B, '2', '1') A FROM テーブル名; で良いと思います。項目名が不明になっているようです。

tatsurou
質問者

お礼

papparaparさん 回答ありがとうございます。 参考にさせて頂きます。

noname#219128
noname#219128
回答No.1

BETWEEN演算子は 式 BETWEEN 式 AND 式 なので BETWEEN A AND B では無く 項目名 BETWEEN A AND B ではないでしょうか?

tatsurou
質問者

お礼

ara-kenさん 回答ありがとうございます。 参考にさせて頂きます。

関連するQ&A