如何在 SQL 服务器中使用 between 运算符?

How to use the between operator in SQL Server?

在我的 SQL 服务器查询中,我有这个

to < GETDATE() or GETDATE() < from

是否可以使用 BETWEEN 运算符来简化它?

是的,但是 (1) 这样做没有查询计划的好处,并且 (2) 这也取决于您的要求。有关比您可能想阅读的更多详细信息,请查看我好友的文章 Beware of Between

例如,从文章.. 如果我在 2 棵树之间开车,我不想包括树木(否则我有树损坏 and/or 汽车损坏)。但是,如果我在纽约和伦敦之间搭乘喷气式飞机,则这两个城市都包括在内(赶上喷气式飞机并降落喷气式飞机)。所以 "car between trees" 与 "jet between cities" 不同;在 SQL 'between' 中用于 "jet between cities" 的 'inclusive' 意义。

此外,有点离题了,你真的需要在你的陈述中加入时间成分吗?如果不是 CAST(GETDATE() as date) 将 return 只是日期部分。

为了说明我的评论,下面是如何使用 BETWEEN.

重写当前过滤器

我不假设 [from] 和 [to] 中的值有任何规则,要么小于另一个,要么相等。如果有这样的规则,那么可能这可以简化。

实际上,经过深思熟虑并写了出来,我发现逻辑并不像我最初想的那么复杂。但是我仍然不会把它叫做 "simplifying" 你已经拥有的东西。

WHERE 
 ([from] <= [to] AND GETDATE() NOT BETWEEN [from] AND [to]) --in this case it's a simple NOT BETWEEN
 OR 
 ([from] > [to])  --if [from] is greater than [to] then actually every possible value of getdate must be either greater than [to] or less than [from]

当然可以简化为between

where GETDATE() BEWTWEEN to AND from