在我的SQL Server查询中,我有这个
to < GETDATE() or GETDATE() < from
是否可以使用BETWEEN
运算符来简化此操作?
答案 0 :(得分:1)
是,但(1)这样做没有查询计划的好处,(2)这也取决于您的要求。有关详细信息,请阅读我的好友文章Beware of Between。
例如,从文章中......如果我在两棵树之间驾驶我的车,我不想包括树木(否则我有树木损坏和/或汽车损坏)。但如果我在纽约和伦敦之间搭乘喷气式飞机,两个城市都包括在内(赶上喷气式飞机并着陆喷气式飞机)。树木和#34;之间的汽车#34;不同于城市之间的喷气式飞机&#34 ;;在SQL&#39;之间用于“包容性”用途感受&#34;城市之间的喷射&#34;。
另外,在一点切线上,你真的需要声明中的时间组件吗?如果不是CAST(GETDATE()作为日期)将仅返回日期部分。
答案 1 :(得分:1)
为了说明我的评论,以下是使用BETWEEN
重写当前过滤器的方法。
我不会假设[from]和[to]中的值有任何规则,要么可能小于另一个,要么它们可能相等。如果有任何此类规则,那么可能会简化这一规则。
实际上,在仔细考虑这个问题后,我发现逻辑并不像我原先想象的那么复杂。但是,我仍然不会称它为“简化”#34;你已经拥有的东西。
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]
答案 2 :(得分:-1)
当然可以简化到
之间where GETDATE() BEWTWEEN to AND from