我有一个场景,我在as400(DB2)上的表格中使用绿色屏幕上的SQL进行选择,并且我使用SQL工具从Windows PC执行相同的SQL语句。
注意未挖掘的值40229和41158. db2端的字段类型为DECIMAL 9.
现在当我使用Sql工具(IBM(R)Data Studio)在Windows PC上运行相同的SQL时:
由于某些原因,数据返回为-40229和-41158
感觉就像某种溢出,但为什么和什么?
当我从Sql工具导航到数据库结构时,字段类型为:
因此在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行的结果......
如果我在绿色屏幕上用相同记录的键进行选择,那么它就是负数???
我注意到的是即使我使用rpgiv程序从表中获取数据,它在rpgiv程序中也是负数。
答案 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)