我有一个场景,使用as400(DB2)上的表在绿屏幕上使用SQL进行选择,并使用SQL工具在windows上执行相同的SQL语句。
在as400(DB2)上:

请注意未关联的值40229和41158。db2侧的字段类型是十进制9。
现在,当我使用SQL工具(IBM(R) Data )在windows上运行相同的Sql时:

由于某些原因,数据被返回为-40229和-41158。
这感觉像是某种形式的溢出,但为什么和什么?
当我从Sql工具导航到数据库结构时,字段类型是:

因此,在as400上,字段类型是十进制9,而从Windows端则是小数点9。
为什么这在Windows上是阴性的?跟这种类型有关吗?
SQL:select * from maxdtaclb.szciexp where TCNUOR ='129444'
SQL AS400:select * from maxdtaclb/szciexp where TCNUOR ='129444'
是否选择了值小于0并得到11行结果的所有.

同样,如果我用相同记录的键在绿色屏幕上进行选择,那么它是负的?
我注意到的是,即使我使用rpgiv程序从表中获取数据,rpgiv程序中也是负的。
发布于 2015-10-22 17:27:45
如果该文件是从DDS源成员(而不是SQL 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-这里有一个链接到7.2ibm手册,描述EDTCDE关键字可用的代码。(它适用于物理文件,即使标题提到显示文件。)
发布于 2015-10-22 17:11:25
你用什么工具来查看绿色屏幕的结果?我假设是STRSQL。
鉴于3种工具中有2种(Data / RPG)显示值为负值,我会说值为负值。
要尝试的一件事是,使用HEX()函数查看数据的十六进制值。你应该看到'000040229D‘的负值,或'000040229F’如果是正的。
然而,'000040229B‘是一个有效的,但很少使用的负面替代。有可能你使用的绿色屏幕工具没有识别它。
但是,至少在我的系统(v7.1tr9)上,STRSQL至少用负号正确地显示了负值的两个版本。

https://stackoverflow.com/questions/33278941
复制相似问题