SQL中where子句的条件检查



我正在为一个查询而苦苦挣扎,该查询允许我检查特定日期(大于且小于2个不同条件)。现在我的查询是这样的

WHERE lastupdatedon < (
CASE
WHEN
(
SELECT count(*)
FROM   mytable) > 0 THEN
(
SELECT max(date)
FROM   mytable)
ELSE getdate()
END)

但是我需要考虑'>'也在条件检查中,即

  • 如果MyTable中没有元素,则condition应为LastUpdatedOn < GETDATE()
  • 如果MyTable中有元素,则条件应为LastUpdatedOn > Max(Date) from MyTable

让我假设将来不会更新日期。如果是这种情况,那么您可以考虑:

WHERE lastupdatedon > ISNULL( (SELECT MAX(date) FROM mytable), '2000-01-01')

注意:虽然我通常更喜欢COALESCE(),但ISNULL()(遗憾地)在SQL Server的子查询中更有效。

也就是说,使用>和遥远的过去的日期。当然,这个逻辑并不完全相同,因为date可以是表中的NULL

另一种选择是:

WHERE (NOT EXISTS (SELECT 1 FROM mytable) AND
lastupdatedon < GETDATE()
) OR
lastupdatedon > (SELECT MAX(date) FROM mytable);

相关内容

  • 没有找到相关文章

最新更新