在WHERE子句中实现CASE

时间:2016-09-21 22:49:51

标签: sql sql-server tsql sql-server-2012 case

在T-SQL WHERE子句中,

如果有/opt/apache-spark/2.0.0/bin/pyspark ,我希望admit_date介于CI.start_dateCI.end_date之间。如果不是结束日期,那么我希望CI.end_dateadmit_date

>= CI.start_date

这不起作用,因为我无法将此CASE作为WHERE子句中表达式的一部分而不是表达式本身。

我该如何实现?

2 个答案:

答案 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)