';去浮';db2中的错误

';去浮';db2中的错误,db2,toad-scripting,Db2,Toad Scripting,查找错误-DB2数据库错误:在函数“DECFLOAT”的字符串参数中发现错误[22018][IBM][DB2/AIX64]SQL0420N无效字符 质疑----- 问题在于您的案例表达式。 对于某些行和其他行中的字符,单个结果列不能是数字 SELECT MSISDN, CONTRNO, TRANSDATE, TARIFF_GROUP, ACT_DURATION, BILLTEXT, GROSS_AMOUNT, CASE

查找错误-DB2数据库错误:在函数“DECFLOAT”的字符串参数中发现错误[22018][IBM][DB2/AIX64]SQL0420N无效字符

质疑-----



问题在于您的案例表达式。 对于某些行和其他行中的字符,单个结果列不能是数字

SELECT 
    MSISDN,
    CONTRNO,
    TRANSDATE,
    TARIFF_GROUP,
    ACT_DURATION,
    BILLTEXT,
    GROSS_AMOUNT,
    CASE
        WHEN TARIFF_GROUP = 'PAG2'
        THEN DECIMAL(ACT_DURATION * 0.001, 10,4)
        ELSE null
    END RA_RATE
  FROM HISTCALLS
  WHERE call_type IN (50, 54)
    AND TRANSDATE = CURRENT date - 1 DAY

动作持续时间的类型是什么?如果是字符,是否检查了问题值?当前会议的文化是什么?你为什么要打两次十进制?您只是在扩大顶端,这不应该影响最终结果。就这点而言,您也可以将乘法和除法结合起来。@Clockwork Muse如果在最近的DB2版本中查询仅表示十进制(即压缩十进制格式),那么DECFLOAT从何而来?如果您尝试对字符串操作数执行算术运算,这些操作数被隐式转换为
DECFLOAT
。我猜在这种情况下,查询优化器会删除冗余的显式强制转换。这在重写的查询文本中应该很明显,如
db2exfmt
所示。这正是解决方案。。谢谢。。当我用-999替换“Check”时,一个数字列不能同时保存一个数字和Varchar值。。。
SELECT 
    MSISDN,
    CONTRNO,
    TRANSDATE,
    TARIFF_GROUP,
    ACT_DURATION,
    BILLTEXT,
    GROSS_AMOUNT,
    CASE
        WHEN TARIFF_GROUP = 'PAG2'
        THEN DECIMAL(ACT_DURATION * 0.001, 10,4)
        ELSE null
    END RA_RATE
  FROM HISTCALLS
  WHERE call_type IN (50, 54)
    AND TRANSDATE = CURRENT date - 1 DAY