プロが教えるわが家の防犯対策術!

こんにちわ。
いまORACLE9iを使用している者です。

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

A 回答 (5件)

手元に確認環境がないので記憶の範囲でお答えします。



確かに decode(項目名, between a and b, ・・・)といった記述はできないと思います。少なくとも Oracle8i まではできませんでした。
もし項目名が数値型であれば
decode(sign(項目名 - b), 1, 'bより大きい', decode( sign(項目名 - a), 1, 'aより大きくb以下', 'a以下'))
のような書き方はできると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/27 11:26

No.1の回答者です。


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

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

お礼日時:2006/12/27 11:45

DECODE(項目名,BETWEEN A AND B, '2', '1')のような式は書けません。


比較する項目が数値であれば、書き方を考えることで可能ですが、文字列の場合は無理です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/27 11:26

SELECT DECODE(項目名,BETWEEN A AND B, '2', '1') FROM テーブル名;



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

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

お礼日時:2006/12/27 11:19

BETWEEN演算子は


式 BETWEEN 式 AND 式
なので
BETWEEN A AND B
では無く
項目名 BETWEEN A AND B
ではないでしょうか?
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/12/27 11:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!