T-SQL 用户 SSMS 2008
我正在运行两个(应该是)有效的相同查询,它们从一个表(比如,表 A)中提取记录,使用 WHERE 语句来定义记录的日期参数被退回。问题是,这 2 个查询返回的计数不同。谁能帮我理解为什么?如您所见,我正试图从根本上拉动 9 月的记录。这是查询...
/*Returns 26,310 records*/
select A.*
from A
where A.Date between '9/1/2015' and '9/30/2015'
/*Returns 27,925 records*/
select A.*
from A
where YEAR(A.Date)*100 + MONTH(A.Date) = 201509
最佳答案
如果您正在处理日期时间数据(与没有时间成分的纯日期相反),我建议您放弃使用 独占 端点:
select A.*
from A
where A.Date >='20150901' and A.Date < '20151001'
独占端点往往更容易计算并且您不必担心时间组件的精度。
您的第一个查询的问题是 '9/30/2015'
与 '9/30/2015 00:00:00'
相同 - 所以,例如,'9/30/2015 00:00:01'
(以及任何更晚的时间)的 Date
值大于该值。有些人试图计算一天的最后时刻(如 23:59:59 或 23:59:59.997),但您必须精确计算,否则您会错过值。因此我上面关于精度的评论。
关于sql - 2 个 "same"WHERE 语句返回不同的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33373949/