DB2 SQL:从EXCEL复制IF-ELSE语句,并从DB2 SQL使用CASE语句

时间:2018-08-23 17:01:23

标签: excel db2

我正在尝试使用CASE语句使用DB2 SQL从Excel复制IF-ELSE语句。我的数据每行有4个日期,并且可以是日历年中的任何日期。在Excel中,公式可以完美地运行,但是,在获取CASE语句以正确获得答案时遇到了问题。

是否有人对它进行了正确编码,或者是否有其他选择可以使用DB2 SQL完成相同的结果?

来自示例:我的问题是我的日期是否在“求婚”或“结束日期”之内?

条件:                  开始日期:1/1/2010 E2                     截止日期:12/31/2018 E3                         我的日期:8/22/2018 E4     结束日期(如果空白r空):1/1/1900 E5                          答案:1如果True = 1,则为逻辑;不= 0             Excel公式:            IF(E3 <> E5,IF(E3 <= E4,0,IF(E2> E4,0,1)),IF(E2> E4,0,1))

DB2 SQL代码

(CASE WHEN E3  <> E5    
      THEN (CASE WHEN E3 <= E4  
                 THEN '0'   
                 ELSE (CASE WHEN E2 > E4    
                            THEN '0'    
                            ELSE '1' END)  END) 
      ELSE (CASE WHEN E2 > E4   
                 THEN '0'   
                 ELSE '1' END)  END)

1 个答案:

答案 0 :(得分:0)

您是否将日期存储为DATE数据类型?如果您将它们存储为字符串,那么您的比较将只是按字母顺序,例如由于字符集中1后面是8,所以"8/22/2018"会大于“ 12/31/2018”。

此外,我不确定“ if Blank r Null”是什么意思,但是您可以使用COALESCE将NULL标记转换为要在比较中使用的值。

您还可以简化CASE语句。例如。参见下面的第二个结果列

SELECT (CASE WHEN E3  <> E5    
      THEN (CASE WHEN E3 <= E4
                 THEN '0'   
                 ELSE (CASE WHEN E2 > E4    
                            THEN '0'    
                            ELSE '1' END)  END) 
      ELSE (CASE WHEN E2 > E4   
                 THEN '0'   
                 ELSE '1' END)  END) AS RESULT
,   CASE WHEN E2 > E4 OR ( E3  <> E5 AND E3 <= E4) THEN 0 ELSE 1 END
       AS SIMPLER
FROM 
TABLE(VALUES (DATE('2010-1-1'), DATE('2018-12-31'),DATE('2018-8-22'), DATE('1900-1-1'))
                ) AS V(E2,E3,E4,E5)