Sql 选择中的AS400 DB2查询数学表达式

Sql 选择中的AS400 DB2查询数学表达式,sql,db2,ibm-midrange,Sql,Db2,Ibm Midrange,我已经有一段时间没有执行DB2查询了,所以Select语句中的数学表达式有问题。它不会抛出错误,但我得到了错误的结果。有人能告诉我DB2是如何计算表达式的吗? 我选择的部分内容如下 这些数值是: t1.点数=100 t2.涉及点=1 (当前日期-t1.fromdt)以天为单位是1268(因此是当前日期) 日期2013年7月19日-2010年1月28日(天) 它应该是(100*1)*(1-(.000274*1268))=65.2568 SELECT Value1, value2,

我已经有一段时间没有执行DB2查询了,所以Select语句中的数学表达式有问题。它不会抛出错误,但我得到了错误的结果。有人能告诉我DB2是如何计算表达式的吗? 我选择的部分内容如下

这些数值是:

  • t1.点数=100
  • t2.涉及点=1
  • (当前日期-t1.fromdt)以天为单位是1268(因此是当前日期) 日期2013年7月19日-2010年1月28日(天)
它应该是(100*1)*(1-(.000274*1268))=65.2568

SELECT Value1,
       value2,
       (CASE
            WHEN (T1.POINTS * T2.INVOLVEPOINTS) * (1 - .000274 * DAYS(CURRENT DATE) - DAYS(T1.FROMDT)) >= 0 THEN (T1.POINTS * T2.INVOLVEPOINTS) * (1 - .000274 * DAYS(CURRENT DATE) - DAYS(T1.FROMDT))
            ELSE 0
        END) AS POINTSTOTAL
FROM TABLE1;
你是说这个吗

...
(T1.POINTS * T2.INVOLVEPOINTS) * (1 - .000274 * ( DAYS(CURRENT DATE) - DAYS(T1.FROMDT) ) ) 
...
请注意,日期减法的周围有一对额外的括号。通常乘法优先于加法,因此在原始查询中,将今天的日期乘以0.000274,从1中减去,然后从结果中减去FROMDT的值


奇怪的是,您的解释中有这些括号,但实际公式中没有。括号没有强制执行正确的连接声明,并且缺少连接声明。此外,可以使用标量函数代替重复语句

以下是用于模拟源数据的证明:

with 
t1 (value1, points, fromdt) 
    as (select 1, 100, '2010-01-28' from sysibm.sysdummy1),
t2 (value2, involvepoints) 
    as (select 2, 1 from sysibm.sysdummy1)
select value1, value2, 
    max(0, t1.points * t2.involvepoints * 
    (1 - .000274 * (DAYS('2013-07-19') - DAYS(t1.fromdt)))) as pointstotal
    from t1, t2;
结果是:

VALUE1 VALUE2 POINTSTOTAL
------ ------ -----------
1      2      65.256800

它实际上必须是(1-(.000274*(天(当前日期)-天(t1.fromdt))。我希望它得到日期差,然后将其乘以.000274,然后将结果从1中减去。我通常使用MS Access SQL,并且可以在同一查询中使用查询定义的字段,这样做会更简单,但无法在DB2中找到一种方法。您可能希望左括号的数量与右括号的数量相等,regardl在你的评论中有5个左括号,只有3个右括号。。。