私はOracle decode()
documentationを読んでいました。私が知る限り、decode(expr, search1, value1, search2, value2...)
を呼び出すとexpr
、search2
およびsearch3
がタイプsearch1
にキャストされ、比較されます。検索がnullの場合のoracleでのデコードの動作
search1
がNULL
の場合、search2
、search3
などはどのようにキャストされますか?
例:
create table sc(a date, b varchar2(256));
insert into sc values(
to_date('2010-01-01 11:22:33', 'yyyy-mm-dd hh24:mi:ss'),
'2010-01-01 11:22:33'
);
select decode(
to_date('2010-01-01 11:22:33', 'yyyy-mm-dd hh24:mi:ss'),
null,
1,
b,
123,
a,
456
)
from sc;
なぜ結果456よりもむしろ123はいかがですか?
を、デコードされ、 "A" とそれにマッチします日付です。デコードが何をしようとするのかをよりよく理解するために、これを "ケース... ... then ... when .. then .. end"と書き直そうとすることができます。ほとんどの場合、デコードはこのようには使用されませんが、これは次のようになります。 "decode(myint、1、 'one'、2、 'two')" – LukStorms
あなたのようなもの。私たちがdecode(1、null、22、 '1'、33、1、44)を呼び出すと、33ではなく44が得られます。 – yemsmvp
本当にありがとうございますか? SELECT DECODE(1、NULL、1、33、 '1'、44)DUAL出力からではない33 – yemsmvp