这是因为您的解码语句的第三个参数为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.我也被抓住了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)