我在db2上执行以下查询并期望输出为可用性>> 3.50 但退出可用性>> 3.50000000000000000000000000000 任何人都可以告诉我我错过了什么。
with abc as
(
select 1+(5.0/2.0) cag_scr
from dual
)
select NVL('Availability', 'NA')||' >> '||MAX(DECODE('Availability','Availability', trunc(cag_scr,2)))
from abc;
答案 0 :(得分:1)
Db2数据库Varchar2 compatibility
设置会影响此行为。
你的db cfg很可能有Varchar2 compatibility = OFF
,这将产生你看到的结果。
但是如果数据库是为Oracle兼容性而正确创建的那么Varchar2 compatibility = ON
会产生我得到的结果(3.5)。
您可以使用强制转换或函数更改表达式结果的数据类型。
例如:
" Varchar2兼容性= OFF":
values 1+(5.0/2.0)
1
---------------------------------
3.50000000000000000000000000000
1 record(s) selected.
values (cast(1+(5.0/2.0) as decimal(4,2)))
1
------
3.50
1 record(s) selected.
values (decimal(1+(5.0/2.0),4,2))
1
------
3.50
1 record(s) selected.
答案 1 :(得分:0)
谢谢你们!得到了问题的解决方案。
with abc as
(
select decimal(1+(5.0/2),2) cag_scr
from dual
)
select NVL('Availability', 'NA')||' >> '||MAX(DECODE('Availability','Availability', CAST(cag_scr AS DECIMAL(20,2))))
from abc