goe*_*goe 4 java sql oracle decode to-char
这个查询:
select nvl(0.75,0) from dual
Run Code Online (Sandbox Code Playgroud)
给我0.75(数字),但这个查询:
select decode(1,0,null,0.75) from dual
Run Code Online (Sandbox Code Playgroud)
给我'.75'(字符串).
为什么?
我试图通过将第二个查询更改为:
select decode(1,0,null,to_char(0.75,'0.99')) from dual
Run Code Online (Sandbox Code Playgroud)
但在我的实际代码中,0.75将是一个字段(NUMBER),可能有不同的小数位数,我不想添加/删除该值的任何内容.
有关如何修复缺失零问题但仍支持所有可能的小数长度的任何想法?
这是因为在3 次的解码语句的参数为NULL; 根据文件1(我的重点).
在比较之前, Oracle会自动将expr和每个搜索值转换为第一个搜索值的数据类型 ....如果第一个结果的数据类型为CHAR,或者第一个结果为null,则Oracle将返回值转换为数据类型VARCHAR2.
在您的情况下,第一个结果是NULL,Oracle将其视为VARCHAR2.您的返回值被隐式转换为VARCHAR2.如果您DECODE()将以下内容更改为以下内容,则会获得一个数字:
select decode(1, 0, 0, 0.75)
Run Code Online (Sandbox Code Playgroud)
并且您可以使用以下NULLIF()函数实现NULL :
select nullif(decode(1, 0, 0, 0.75), 0) ...
Run Code Online (Sandbox Code Playgroud)
最好使用CASE语句,该语句强制所有返回的数据类型都相同:
select case 1 when 0 then null
else 0.75
end ...
Run Code Online (Sandbox Code Playgroud)
我也被抓住了.
| 归档时间: |
|
| 查看次数: |
2213 次 |
| 最近记录: |