空值检查并在then子句中进行比较

时间:2019-06-05 11:48:21

标签: sql-server

我的数据库中有两个表。第一个称为F,第二个称为T。F存储两个信息。 “ date_received”和“ date_removed”可以为空。 T仅存储任意日期的“日期”。 F可以存储对象的信息。例如,

2019-05-19 2019-05-31 ==>表示在这些日期之间它属于某个人

2019-06-03 NULL ==>表示它仍然属于某人。

我在T中有两个约会,分别是2019-05-25和2019-06-05。 对于2019-05-25来说很容易找到,因为我可以使用BETWEEN子句,但是 2019-06-05我不能。 我需要编写if-else或case条件来检查F.date_removed是否为空

CASE
  WHEN F.date_removed IS NULL THEN T.date > F.date_received
  ELSE  T.date BETWEEN F.date_received AND F.date_removed
END

如何处理此问题。我需要根据“ date_removed”的null来在两个比较选项之间切换

2 个答案:

答案 0 :(得分:2)

据我了解,您的规则将保留在where子句中,因此您可以这样做。

WHERE
((F.date_removed IS NULL AND T.date > F.date_received) OR (T.date BETWEEN F.date_received AND F.date_removed))

答案 1 :(得分:1)

另一种选择,它的罗word性稍差。

WHERE
        T.date >= F.date_received
    AND (F.date_removed IS NULL OR T.date <= F.date_removed)