在T-SQL WHERE子句中,
如果有/opt/apache-spark/2.0.0/bin/pyspark
,我希望admit_date
介于CI.start_date
和CI.end_date
之间。如果不是结束日期,那么我希望CI.end_date
为admit_date
>= CI.start_date
这不起作用,因为我无法将此CASE作为WHERE子句中表达式的一部分而不是表达式本身。
我该如何实现?
答案 0 :(得分:3)
CASE
不属于WHERE
条款。它的存在是为了让您有机会评估布尔表达式。在WHERE
子句中,您不需要它,因为该子句本身就是一个布尔表达式。
WHERE (CI.end_date IS NULL AND CEV.admit_date >= CI.start_date)
OR (CI.end_date IS NOT NULL AND CEV.admit_date BETWEEN CI.start_date AND CI.end_date);
或者:
WHERE CEV.admit_date >= CI.start_date)
AND (CEV.admit_date <= CI.end_date OR CI.end_date IS NULL);
可以用
代替WHERE CEV.admit_date BETWEEN CI.start_date AND COALESCE(CI.end_date, CEV.admit_date);
顺便说一下。
答案 1 :(得分:0)
WHERE (CI.end_date IS NULL AND CEV.admit_date >= CI.start_date)
OR (CEV.admit_date BETWEEN CI.start_date AND CI.end_date)