db2中查询的意外行为

时间:2017-09-21 14:15:48

标签: sql oracle db2

我在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;

2 个答案:

答案 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