SQL中where子句的条件签入
我正在努力寻找一个查询,它允许我在两种不同的情况下检查一个大于或小于2的特定日期。现在我的问题是这样的SQL中where子句的条件签入,sql,sql-server,where-clause,Sql,Sql Server,Where Clause,我正在努力寻找一个查询,它允许我在两种不同的情况下检查一个大于或小于2的特定日期。现在我的问题是这样的 WHERE lastupdatedon < ( CASE WHEN ( SELECT count(*) FROM mytable) > 0 THEN ( SELECT max(date) FROM mytable) ELSE getdate() END) 但我需要在条件检验中考虑“>”,即
WHERE lastupdatedon < (
CASE
WHEN
(
SELECT count(*)
FROM mytable) > 0 THEN
(
SELECT max(date)
FROM mytable)
ELSE getdate()
END)
<>但我需要在条件检验中考虑“>”,即
若MyTable中并没有元素,那个么条件应该是LastUpdateOn让我假设更新日期永远不会出现在未来。如果是这样,那么您可以考虑:
WHERE lastupdatedon > ISNULL( (SELECT MAX(date) FROM mytable), '2000-01-01')
注意:虽然我通常更喜欢COALESCE,但遗憾的是,ISNULL在带有子查询的SQLServer中更有效
也就是说,使用>和一个远在过去的日期。当然,这种逻辑并不完全相同,因为表中的date可以为NULL
另一种选择是:
WHERE (NOT EXISTS (SELECT 1 FROM mytable) AND
lastupdatedon < GETDATE()
) OR
lastupdatedon > (SELECT MAX(date) FROM mytable);
那么,什么对你所拥有的东西不起作用呢?当你想要表达的东西可以用简单的条件和ANDs和ORs来完成时,不要跳转到CASE表达式IFNULL@Charlieface . . . 非常感谢。这表明我多么喜欢合并。