我想运行以下两个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 }}
我想知道为什么行数之间存在差异?我的查询有什么问题吗?
答案 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 ,'') = ''