SQL Server日期范围查询无效

时间:2016-09-17 12:35:05

标签: sql sql-server

我想运行以下两个SQL查询:

1 Oct 2014 to 31 Dec 2014之间计算行数。为此,我运行了这个查询。

select count(*)
from table_name 
where date_column > '30-Sep-2014 23:59:59.999' and date_column < '01-Jan-2015 00:00:00.000'

我得到了结果28674262

第二个查询是在我查询后运行1 Jul 2014 to 31 Sep 2014之间获取行数。

select count(*)
from table_name
WHERE date_column > '30-Jun-2014 23:59:59.999' and date_column < '01-Oct-2014 00:00:00.000'

我得到了这个结果:28296043

现在,为了获得1 Jul 2014 to 31 Dec 2014时间段的行计数,我运行了以下查询。

select count(*)
from table_name 
WHERE date_column > '30-Jun-2014 23:59:59.999' and date_column < '01-Jan-2015 00:00:00.000'

此查询提供结果57361505

如果我添加第一个和第二个查询的结果,它应该给出与第三个查询相同的行数,即57361505,但我得到28674262 + 28296043 = {{1 }}

我想知道为什么行数之间存在差异?我的查询有什么问题吗?

3 个答案:

答案 0 :(得分:4)

你似乎有一些记录,比如200,其中日期在'30 -Sep-2014 23:59:59.999'和'01 -Oct-2014 00:00:00.000'之间。这取决于日期/时间值的类型。

摆脱时间戳!他们只是令人困惑的事情。使用这些条件:

where date_column >= '2014-10-01' and date_column < '2015-01-01'
where date_column >= '2014-07-01' and date_column < '2014-10-01'
where date_column >= '2014-07-01' and date_column < '2015-01-01'

一般情况下,在使用日期时,请在日期上使用没有时间成分的比较,并在适当的时候使用不等式条件。

另请注意,我已切换到ISO标准日期格式。

答案 1 :(得分:1)

尝试以下查询,让我知道它返回的计数。

select count(*) from table_name 
WHERE date_column >= '01-Jul-2014' and date_column <= '31-Dec-2014 23:59:59:999'

答案 2 :(得分:1)

date_column中必须有一些空值,还要计算

select count(*)
from table_name 
WHERE isnull(date_column ,'') = ''