ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3991457 「何々でなければ、この値」というような関数
質問者:noname#62152 「何々でなければ、この値」というような関数を探しています。

こんな感じです。
func(ZZZ, 'A', 'P')
ZZZが'A'でなければ'P'を返す


イメージ

select ZZZ z, func(ZZZ, 'A', 'P')  f from テーブル;

z     f
−   −
A    A
NULL P
P    P
B    P


なお、一つの関数である必要はなく、関数を組み合わせたり、入れ子にしたりするのはかまいません。

もしかすると、次のようにするとできるかもしれません。
NVL2 ( NULLIF('A', ZZZ), 'P', 'A' )

ただ、わかりにくい感じがするので。
困り度:
  • 困っています
質問投稿日時:
08/05/02 03:05
この質問に対する回答は締め切られました。

回答

ANo.3 関数を使わない案として

select IIF(ZZZ = 'A','','P') from テーブル;
または、
select CASE〜

IIFでは、ZZZ='A'が真の場合は''を返却
以外は'P'を返却します。

※すみません、検証してないので、構文あってないかもしれません。関数使わなくていいなら、SELECT CASE、IIF関数で目的達成できるかもと思った次第です。
回答者:WIZDASH
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/05 00:29
この回答へのお礼ご回答ありがとうございます

回答良回答10pt

ANo.2 CASE ZZZ
  WHEN 'A' THEN 'A'
  ELSE 'P'
END

というCASE式でいかがでしょう。
コーディングは長めですが、意味は明確です。
もちろん、1行に書いてもかまいません。
回答者:masa6272
種類:回答
どんな人:経験者
自信:参考意見
回答日時:
08/05/02 07:16
この回答へのお礼ご回答ありがとうございます

回答良回答20pt

ANo.1 >>> NVL2 ( NULLIF('A', ZZZ), 'P', 'A' )
>>> ただ、わかりにくい感じがするので。

慣れだと思うのでそれでよいでしょうが、

DECODE(ZZZ,'A','A','P')

というのも考えられます。
回答者:auty
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/05/02 04:32
この回答へのお礼ご回答ありがとうございます。