2016-09-17 66 views
1

我想運行以下兩個SQL查詢:1 Oct 2014 to 31 Dec 2014之間SQL服務器的日期範圍查詢不能

採取的行數。爲此,我運行了這個查詢。

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

如果我添加1和第二查詢的結果,應該給予同樣的行數爲3的查詢,這是57361505但我正在逐漸28674262 + 28296043 = 56970305

我想知道爲什麼會出現差異行數之間?我的查詢有什麼問題嗎?

+0

號在第三個查詢我找七月間行計數到12月。 – Shekhar

+0

你是否也在第二次運行中獲得同樣的區別? –

回答

4

你似乎有一些記錄,比如200,其中的日期是'30 -sep 2014年之間的23:59:59.999' 和'01 - 辛-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標準日期格式。

+0

謝謝。我會嘗試這種方式 – Shekhar

+0

這種方法工作。現在行數正確匹配。我想知道2014年9月30日23:59:59.999和'01 - 2014年00:00:00.000'之間的日期時間。 – Shekhar

+1

也許你正在使用'datetime2'數據類型?更多信息[這裏](https://technet.microsoft.com/en-us/library/bb677335(v = sql.105).aspx)。這種格式將最少19個位置(YYYY-MM-DD hh:mm:ss)存儲爲27個最大值(YYYY-MM-DD hh:mm:ss。0000000)' – gofr1

1

請嘗試在下面的查詢,讓我知道它返回什麼數。

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

感謝您幫助我在週末:)我跑這個查詢,但我得到了行計數爲'57771746'。你能檢查一下我的邏輯是否有問題嗎?我期待正確的事情嗎? – Shekhar

+1

做一件事情,如果你有Excel然後獲取所有記錄在Excel中,並計數那裏與日期範圍和比較計數到您的查詢,也嘗試查詢,因爲我解釋,看看哪個查詢給你計數與Excel匹配 –

1

必須有date_column一些空值,也算這

+1

是的,你可能沒錯 –