【问题标题】:DB2 decfloat errorDB2 decfloat 错误
【发布时间】:2017-12-22 14:19:01
【问题描述】:

我在查询中收到以下错误:

在函数“DECFLOAT”的字符串参数中发现无效字符。

但是我没有对我选择的任何字段进行任何更改:

select
RQH.COMPANY, 
RQH.LAST_APRV_DT, 
RQH.CREATION_DATE, 
RQH.RELEASED_DATE, 
RQH.REL_OPER_ID, 
RQH.REQ_NUMBER, 
RQH.REQUESTER, 

RLN.COMPANY, 
RLN.BUYER,
RLN.DESCRIPTION, 
RLN.TRAN_UNIT_COST, 
RLN.QUANTITY, 
RLN.ITEM, 
RLN.VEN_ITEM, 
RLN.LINE_NBR, 
RLN.MANUF_CODE, 
RLN.MANUF_NBR, 
RLN.VENDOR, 
RLN.REQ_NUMBER, 
RLN.ENTERED_UOM, 


MMD.LINE_NBR, 
MMD.DOC_NBR_NUM, 

VEN.VENDOR_VNAME, 
VEN.VENDOR_GROUP, 
VEN.VENDOR

from mmd 

join rln on MMD.COMPANY = rln.COMPANY and MMD.DOC_NBR_NUM = rln.REQ_NUMBER 
    and MMD.LINE_NBR = rln.LINE_NBR

join cpy on rln.company = cpy.company

join ven on VEN.VENDOR_GROUP = cpy.VENDOR_GROUP and VEN.VENDOR = rln.VENDOR

join rqh on RLN.COMPANY = RQH.COMPANY and RLN.REQ_NUMBER = RQH.REQ_NUMBER

where ven.vendor = 20200

【问题讨论】:

  • 我没有看到这里调用了 DECFLOAT 函数。闻起来像触发问题。再说一次,你只是在做一个选择......这让我认为这是一个隐式转换的数据类型问题。对 DB2 不是很熟悉,所以对它持保留态度。
  • 这些是视图吗?
  • @JacobH 不,我是直接从桌子上拉出来的;我对其进行了更多分类,看起来问题与我的 where 语句有关,但我不知道为什么,我已经在另一个类似查询中在同一张表上运行了该确切条件,没有问题
  • 试试ven.vendor = '20200'
  • 是的,我试过了,但没有返回任何结果,我确实验证了供应商字段是一个字符串。然而,在我创建的另一个运行正确的查询中(我让 vendor = number 字段),当我让 vendor 一个文本字段时,什么都没有出现,但是作为一个数字字段值确实出现了

标签: sql db2 rapidsql


【解决方案1】:

您的一个比较在一侧具有数字数据类型,在另一侧具有字符数据类型。该对中字符列中的一个值不能转换为数字。 Db2 data type conversion rules 声明如果一个操作数是数字而另一个是字符类型,则字符值将被隐式强制转换为数字。对于无法强制执行的值,这显然会失败。如果这是一个有效值,您需要将数字列显式转换为字符数据类型(根据需要用空格填充)。

【讨论】:

  • 我检查了所有的比较对都有相同的数据类型
  • 你刚才说ven.vendorcharacter(9),你是在和一个整数值20200比较
  • 对不起,让我澄清一下,在上面的查询中,如果我使用“ven.vendor = 20200”,我会从上面得到错误,如果我使用“ven.vendor = '20200'”,我不会返回的数据。如果我使用“ven.vendor = 20200”,则在另一个也使用“ven”表的查询上,然后填充数据。两个查询都有应填充的数据(这不是内部联接问题)。
【解决方案2】:

如果您完全删除“WHERE”子句,您仍然会收到错误还是会消失?

【讨论】:

  • 我不能肯定地说,因为它有太多的数据,如果没有 where 子句,在我确定是否出现 decfloat 问题之前它可能会超时,我确实尝试使用日期字段它运行没有问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多