来自 IBM AS400 的小数字段在 windows 上显示负数

Decimal Fields displays negative on windows from IBM AS400

我有一个场景,我在绿屏上从 as400(DB2) 上的 table 执行 select 和 SQL,我也这样做 SQL 来自 windows PC 和 SQL 工具的语句。

在 as400(DB2) 上:

注意未划线的值 40229 和 41158。db2 端的字段类型是 DECIMAL 9。

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

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

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

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

所以在 as400 上,字段类型是 DECIMAL 9,从 Windows 那边是 DECIMAL 9..

为什么 Windows 是负面的?与类型有关?

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

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

做了一个 select 所有值小于 0 并得到 11 行的结果...

同样,如果我在绿屏上使用相同记录的键执行 select,它是否定的???

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

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

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

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

但是,“000040229B”是一个有效但很少使用的否定替代选项。您使用的绿屏工具可能无法识别它。

但是,至少在我的系统 (v7.1 TR 9) 上,STRSQL 至少可以正确显示负值的两个版本并带有负号。

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

DDS 源成员中的示例文件定义::

            R RDMC001P                           
              NUMFLD1        5P 0       EDTCDE(3)

示例 SQL session:

> 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 关键字的代码。 (即使标题提到显示文件,它也适用于物理文件。)