トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
2-2-11 case式とLNNVL述語
SQLパズル
BoolTable
Val1 Val2
---- ----
1 9
9 9
9 1
null 1
1 null
Val1とVal2を比較し、Val1 < Val2がtrueでなければ(unknownかfalseであれば)1、
Val1とVal2を比較し、Val1 < Val2がfalseでなければ(unknownかtrueであれば)1、
を取得する。
出力結果
Val1 Val2 IsNotTrue IsNotFalse
---- ---- --------- ----------
1 9 0 1
9 9 1 0
9 1 1 0
null 1 1 1
1 null 1 1
データ作成スクリプト
create table BoolTable(Val1,Val2) as
select 1, 9 from dual union
select 9, 9 from dual union
select 9, 1 from dual union
select null, 1 from dual union
select 1,null from dual;
SQL
--■■■LNNVL述語で判定する方法(10g以降)■■■
select Val1,Val2,
case when LNNVL(Val1 < Val2) then 1 else 0 end as IsNotTrue,
case when LNNVL(Val1 >= Val2) then 1 else 0 end as IsNotFalse
from BoolTable;
--■■■case式で判定する方法■■■
select Val1,Val2,
case when Val1 < Val2 then 0 else 1 end as IsNotTrue,
case when Val1 >= Val2 then 0 else 1 end as IsNotFalse1,
case when not(Val1 < Val2) then 0 else 1 end as IsNotFalse2
from BoolTable;
解説
LNNVL述語で判定する方法では、
Val1 < Val2がfalseであることは、
Val1 >= Val2がtrueであることと同値であるというロジックを使ってます。
LNNVL述語は、
引数となった条件が、trueだとfalse
引数となった条件が、falseだとtrue
引数となった条件が、unknownだとtrue
を返します。
LNNVL述語の引数に、andやorなどの論理演算は使えないようです。
LNNVL述語は、is not true述語の弱体版といえるでしょう。
case式やLNNVL述語を使えば
is not true述語や
is not false述語を模倣できます。
8-2 case式でis not falseを模倣
10-155 is not trueとis not falseを模倣
マニュアル(LNNVL述語)(英語)
マニュアル(LNNVL述語)
3値論理の資料
3値論理の資料
3値論理の資料
BOOLEAN型の資料