IBM AS400的窗口上的十进制字段显示为负数

时间:2015-10-22 10:32:55

标签: sql database db2 ibm-midrange db2-400

我有一个场景,我在as400(DB2)上的表格中使用绿色屏幕上的SQL进行选择,并且我使用SQL工具从Windows PC执行相同的SQL语句。

在as400(DB2)上: enter image description here

注意未挖掘的值40229和41158. db2端的字段类型为DECIMAL 9.

现在当我使用Sql工具(IBM(R)Data Studio)在Windows PC上运行相同的SQL时:

enter image description here

由于某些原因,数据返回为-40229和-41158

感觉就像某种溢出,但为什么和什么?

当我从Sql工具导航到数据库结构时,字段类型为:

enter image description here

因此在as400上,fieldtype为DECIMAL 9,而从Windows端为DECIMAL 9 ..

为什么在Windows上这是否定的?与类型有关吗?

SQL Windows:select * from maxdtaclb.szciexp where TCNUOR ='129444'

SQL AS400:select * from maxdtaclb/szciexp where TCNUOR ='129444'

选择所有where值小于0并得到11行的结果......

enter image description here

如果我在绿色屏幕上用相同记录的键进行选择,那么它就是负数???

我注意到的是即使我使用rpgiv程序从表中获取数据,它在rpgiv程序中也是负数。

2 个答案:

答案 0 :(得分:4)

如果文件是从DDS源成员(而不是SQL DDL CREATE TABLE语句)创建的,则可能是使用EDTCDE关键字定义了该字段。编辑代码可用于控制在交互式会话中查询输出中数值的显示方式。使用编辑代码1,2,3或4将导致负号被抑制。如果在表达式中使用该字段,SQL将生成一个不再由编辑代码格式化的派生列。

DDS源成员::

中的示例文件定义
            R RDMC001P                           
              NUMFLD1        5P 0       EDTCDE(3)

示例SQL会话:

> insert into dmclib/dmc001p           
  values (-12345)                      
  1 rows inserted in DMC001P in DMCLIB.
> select NUMFLD1 from dmclib/dmc001p         
  NUMFLD1
   12345
> select decimal(numfld1,5,0) as NUMFLD2 from dmclib/dmc001p       
  NUMFLD2 
   12,345-

Here's a link到7.2 IBM手册,描述了可用于EDTCDE DDS关键字的代码。 (它适用于物理文件,即使标题提到了显示文件。)

答案 1 :(得分:0)

您使用什么工具查看绿屏的结果?我假设是STRSQL。

鉴于3个工具中的2个(Data Studio / RPG)显示该值为负,我会说该值为负。

要尝试一件事,使用HEX()函数查看数据的十六进制值。您应该看到'000040229D'为负值,或'000040229F'为正值。

然而,'000040229B'是一个有效但很少使用的替代方案。您正在使用的绿屏工具可能无法识别它。

但是,至少在我的系统上(v7.1 TR 9),STRSQL至少会在负号上正确显示负值的两个版本。
enter image description here