sql - 日期比较 BETWEEN vs < >
问题描述
我对 BETWEEN 关键字与使用 < 和 > 运算符比较上限和下限日期的性能有疑问。
例子:
WHERE EncDate BETWEEN '2010-04-30' AND GETDATE() - 1
WHERE EncDate > '2010-04-29' AND EncDate < GETDATE()
上面的两个查询都应该输出完全相同的行数,但是,我是否正确假设 BETWEEN 关键字在幕后执行包容性(>= 或 <=)比较,其性能不如从第二个查询?
解决方案
这两个不一样!
WHERE EncDate BETWEEN '2010-04-30' AND GETDATE() - 1
WHERE EncDate > '2010-04-29' AND EncDate < GETDATE()
如果EncDate
是没有时间成分的日期,它们将产生相同的结果集。否则,它们是不同的。
一般建议是使用:
WHERE EncDate >= '2010-04-30' AND
EncDate < CONVERT(DATE, GETDATE())
这对于是否存在时间分量具有相同的含义。
我很确定从优化的角度来看,这些是完全相同的。在使用数据库时,比较时间这样的小事情通常不会对性能产生影响——昂贵的操作正在移动数据。
Aaron Bertrand 对使用日期/时间数据类型进行了很好的讨论BETWEEN
,名为What Do Between And The Devil Have In Common。
推荐阅读
- installshield - 如何签署可以在任何地方运行的 exe 或 msix 安装程序
- scala - Deciding number of parameter to pass to a method "dynamically"
- amazon-web-services - Commands in .ebextensions fails on ElasticBeanstalk
- javascript - Angular ngmodel ignores value attribute in a form input
- c - C programming : Read numbers in .txt file containing also character
- wordpress - remove category archive titles
- python - Elegant way to import data to a geopandas GeoDataFrame
- javascript - Trying to show popover when my svg icons are hovered .
tag not working - python - Pandas 中的 MS Excel 等累积和
- html - flex 容器中的内容和项目在一个容器/项目中溢出,但在另一个容器/项目中不溢出