Sql 十进制字段在IBM AS400的windows上显示为负数
我有一个场景,在这个场景中,我在as400(DB2)上的一个表中使用绿色屏幕上的SQL执行select,并且在windows PC上使用SQL工具执行相同的SQL语句 在as400(DB2)上: 请注意未重新定义的值40229和41158。db2端的字段类型是十进制9 现在,当我使用SQL工具(IBM(R)Data Studio)在windows PC上运行相同的SQL时: 由于某种原因,当数据返回为-40229和-41158时 这感觉像是某种溢出,但为什么 从Sql工具导航到数据库结构时,字段类型为: 因此,在as400上,字段类型为十进制9,从Windows端看,字段类型为十进制9 为什么这是负面的窗口?和类型有关吗 SQL窗口:Sql 十进制字段在IBM AS400的windows上显示为负数,sql,database,db2,ibm-midrange,db2-400,Sql,Database,Db2,Ibm Midrange,Db2 400,我有一个场景,在这个场景中,我在as400(DB2)上的一个表中使用绿色屏幕上的SQL执行select,并且在windows PC上使用SQL工具执行相同的SQL语句 在as400(DB2)上: 请注意未重新定义的值40229和41158。db2端的字段类型是十进制9 现在,当我使用SQL工具(IBM(R)Data Studio)在windows PC上运行相同的SQL时: 由于某种原因,当数据返回为-40229和-41158时 这感觉像是某种溢出,但为什么 从Sql工具导航到数据库结构时,
select*from maxdtaclb.szciexp,其中TCNUOR='129444'
SQL AS400:select*from maxdtaclb/szciexp,其中TCNUOR='129444'
是否选择了值小于0的所有位置,并获得了11行的结果
再次,如果我在绿色屏幕上用相同的记录键进行选择,它是负数
我注意到,即使我使用rpgiv程序从表中获取数据,rpgiv程序中的数据也是负值。您使用什么工具查看绿色屏幕的结果?我假设是STRSQL 考虑到三分之二的工具(DataStudio/RPG)将该值显示为负值,我认为该值为负值 尝试一件事,使用HEX()函数查看数据的十六进制值。负值应为“000040229D”,正值应为“000040229F” 然而,“000040229B”是一个有效但很少使用的负片替代品。您使用的绿色屏幕工具可能无法识别它 但是,至少在我的系统(v7.1 TR 9)上,STRSQL至少用负号正确地显示两个版本的负值。
您使用什么工具查看绿色屏幕的结果?我假设是STRSQL 考虑到三分之二的工具(DataStudio/RPG)将该值显示为负值,我认为该值为负值 尝试一件事,使用HEX()函数查看数据的十六进制值。负值应为“000040229D”,正值应为“000040229F” 然而,“000040229B”是一个有效但很少使用的负片替代品。您使用的绿色屏幕工具可能无法识别它 但是,至少在我的系统(v7.1 TR 9)上,STRSQL至少用负号正确地显示两个版本的负值。
如果文件是从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-
请参阅7.2 IBM手册,该手册描述了EDTCDE DDS关键字的可用代码。(即使标题提到显示文件,它也适用于物理文件。)如果文件是从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-
请参阅7.2 IBM手册,该手册描述了EDTCDE DDS关键字的可用代码。(它适用于物理文件,即使标题中提到了显示文件。)我相信您可以在该工具中设置许多内容的格式,包括日期(您可能应该更改为使用
*ISO
)。我想它也包括数字?我先检查一下。我们可以看看声明吗?只是这组字段吗?是不是只有这一行(我们确定是同一行,尽管看起来是这样的)?您确定您正在访问同一个表(会话中未设置*LIBL
或其他内容)?它正是受影响的同一个表和同一行。唯一奇怪的是,如果我选择另一行,值是正确的(不是负的),就像我的示例中的一些值不正确一样。我将检查*ISO格式..正确的示例检查我的as400的第一个图像值:18919在windows端显示正确,但40229显示负数。。。这就是为什么我觉得有点像溢出?我和@Clockwork Muse在一起……你确定是同一排吗?尝试将RRN()
添加到您的选择中,如下所示:select RRN(a),a.*来自maxdtaclb.szciexp a,其中TCNUOR='129444'
如果溢出,则不太可能是相同的值,而不是负值。此外,压缩十进制不会像整数那样溢出。我相信您可以在该工具中为许多事情设置格式,包括日期(您可能应该更改为使用*ISO
)。我想它也包括数字?我先检查一下。我们可以看看声明吗?只是这组字段吗?是不是只有这一行(我们确定是同一行,尽管看起来是这样的)?您确定您正在访问同一个表(会话中没有设置*LIBL
或其他内容)?它完全是同一个表和同一行