我正在阅读Oracledecode()
文档。据我所知,打电话时decode(expr, search1, value1, search2, value2...)
甲骨文铸件expr
,search2
并search3
以种类search1
并进行比较。
所以,如果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?
编辑:当要与之比较的第一个值为null或char时,所有值都将转换为varchar2并作为字符串进行比较。因此,比较始终相等的类型,如果不比较字符串,则不要将null用作第一个比较值:
select decode(
to_date('2010-01-01 11:22:33', 'yyyy-mm-dd hh24:mi:ss'),
to_date('2010-01-01 11:22:31', 'yyyy-mm-dd hh24:mi:ss'),
0,
null,
1,
to_char(to_date('2010-01-01 11:22:33', 'yyyy-mm-dd hh24:mi:ss')),
2,
to_date(b, 'yyyy-mm-dd hh24:mi:ss'),
123,
a,
456
)
from sc;
如果第一个比较值是NULL,则日期将转换为具有默认日期表示形式的字符串(可以与b中的日期表示不同),并与b比较。如果要查看默认值,请使用以下命令:
select to_char(to_date('2010-01-01 11:22:33', 'yyyy-mm-dd hh24:mi:ss')),b from sc
如果我们阅读Oracle文档:
如果第一个结果的数据类型为CHAR或第一个结果为null,则Oracle会将返回值转换为数据类型VARCHAR2。
值也会发生同样的情况。第一个值为null,然后将所有内容转换为字符串。您可以在这里看到它。
SELECT DECODE (1, NULL, 1, '01', 2, '1 ', 3, '1', 4, 1, 5) FROM DUAL;
现在,用数字更改null
SELECT DECODE (1, 5, 1, '01', 2, '1 ', 3, '1', 4, 1, 5) FROM DUAL;
这会带来什么:
SELECT DECODE (TO_DATE ('2010-01-01 11:22:33', 'yyyy-mm-dd hh24:mi:ss'),
NULL, 1,
TO_DATE ('2010-01-01 15:22:32', 'yyyy-mm-dd hh24:mi:ss'), 2,
'3')
FROM DUAL
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句