为什么Oracle的DECODE给我的价值不同于NVL?

为什么Oracle的DECODE给我的价值不同于NVL?,第1张

为什么Oracle的DECODE给我的价值不同于NVL?

这是因为您的解码语句的第三个参数为NULL。根据文档1(我的重点)。

在比较之前, Oracle自动将expr和每个搜索值转换为第一个搜索值的 数据类型。 如果第一个结果的数据类型为CHAR或
第一个结果为null,则Oracle将返回值转换为数据类型VARCHAR2

在您的情况下,第一个结果是NULL,Oracle将其视为VARCHAR2。您的返回值正在隐式转换为VARCHAR2。如果您将其更改

DECODE()
为以下内容,则会得到一个数字:

select depre(1, 0, 0, 0.75)

您可以使用以下

NULLIF()
函数实现NULL

select nullif(depre(1, 0, 0, 0.75), 0) ...

最好使用CASE语句,该语句强制所有返回的数据类型都相同:

select case 1 when 0 then null   else 0.75       end ...

1.我也被抓住了。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5490555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存