Ibm midrange 在Db2中,连字符对于i查询结果意味着什么?

Ibm midrange 在Db2中,连字符对于i查询结果意味着什么?,ibm-midrange,db2-400,Ibm Midrange,Db2 400,我想在下面的查询中过滤掉包含破折号的行。PRMWT列为十进制9,3 质疑 结果 PPA# PRMWT 20829161 53.513 20829161 - 20829161 - 20829161 - 20829161 - 20829161 - 如果我添加条件且PRMWT不为空,则结果相同,我得到以下警告: SQL状态:01565供应商代码:802消息:[SQL0802]数据转换 或数据映射错误。原因……:出现错误类型6。 错误类型及其含义是:1

我想在下面的查询中过滤掉包含破折号的行。PRMWT列为十进制9,3

质疑

结果

PPA#        PRMWT
20829161    53.513
20829161    -
20829161    -
20829161    -
20829161    -
20829161    -
如果我添加条件且PRMWT不为空,则结果相同,我得到以下警告:

SQL状态:01565供应商代码:802消息:[SQL0802]数据转换 或数据映射错误。原因……:出现错误类型6。 错误类型及其含义是:1-算术溢出。2 - 浮点溢出。3-浮点下溢。4-浮动 点转换错误。5-不是一个精确的结果。6-数字数据 这是无效的。7-双字节字符集DBCS或UTF-8数据 这是无效的。8-被零除。9-哈希值不能为空 为请求的查询计算。10-返回的用户定义函数 映射错误。11-在可变长度中发现无效长度 从数组结果集返回的列。12-测试结果 可变长度字段上的串联操作超过最大值 结果类型的允许长度。如果错误发生在 为FETCH、嵌入式SELECT、SET的主机变量赋值, 或值转换为语句,主机变量名为*N INTO子句中主机变量的相对位置为2。如果 主机变量名为*N,尝试 解决搜索条件。如果有多个数据映射错误 发生,这是对发生的第一个错误的描述。为了 有关任何其他数据映射错误的说明,请参阅前面的 作业日志中列出的消息。恢复…:错误是 由无效或太大的数据引起。看这张照片 作业日志DSPJOBLOG命令中先前列出的消息,或按 F10在此显示器上显示作业日志中的消息,以确定 错误涉及行和列。更正数据,然后 请重试该请求

仔细检查后,我发现这个列有Nullable=No。好的,但是为什么它有一些非数字的东西呢

我还尝试了PRMWT>0,PRMWT>0.0,PRMWT>000000.000,PRMWT!='-',PRMWT!=,PRMWT=CAST0.0作为小数9,3,CASTPRMWT作为浮点>0.0,以此类推

我迷路了。在这个该死的DB引擎中,连字符到底意味着什么?我该如何操作它?操作系统版本为7.2。

使用十六进制函数在PRMWT字段中查找十进制数据错误:

要更正错误数据,可以测试特定十六进制值,并使用SQL UPDATE将字段设置为0

update FUTMODS.SCPMSTQ
set    PRMWT = 0
where  hex(PRMWT) = '404040'
这是一篇好文章:

使用十六进制函数在PRMWT字段中查找十进制数据错误:

要更正错误数据,可以测试特定十六进制值,并使用SQL UPDATE将字段设置为0

update FUTMODS.SCPMSTQ
set    PRMWT = 0
where  hex(PRMWT) = '404040'

这是一篇好文章:

好吧,在我有机会尝试这个之前,有人清理了坏数据,但我认为这个答案会起作用,因此接受了它。对我来说很奇怪,数据库一开始就允许垃圾数据,但现在我们做到了。SQL不允许坏数据。但RPG和记录i/o确实如此。该系统有着悠久的历史。所编写的应用程序支持大量用户在硬件上运行,而当前可用性能只有一小部分。事实上,非常值得注意的是,过去的商业应用程序能够做到这一点。更具体地说,传统DDS定义的物理文件中的数据是在读取时验证的。然而,SQL DDL定义的表中的数据在写入时进行验证。而且,一旦OP更新到较新版本的操作系统,就可以使用。@MarredCheese实际上,用于写入数据的内容并不重要,重要的是用于定义表或文件的内容。嗯,在我有机会尝试这个之前,有人清理了这些坏数据,但我认为这个答案会起作用,因此我接受了它。对我来说很奇怪,数据库一开始就允许垃圾数据,但现在我们做到了。SQL不允许坏数据。但RPG和记录i/o确实如此。该系统有着悠久的历史。所编写的应用程序支持大量用户在硬件上运行,而当前可用性能只有一小部分。事实上,非常值得注意的是,过去的商业应用程序能够做到这一点。更具体地说,传统DDS定义的物理文件中的数据是在读取时验证的。然而,SQL DDL定义的表中的数据在写入时进行验证。此外,一旦OP更新到较新版本的操作系统,则可以使用。@MarredCheese实际上,用于写入数据的内容并不重要,重要的是用于定义表或文件的内容。
update FUTMODS.SCPMSTQ
set    PRMWT = 0
where  hex(PRMWT) = '404040'