我正在尝试使用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)
答案 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)