2012-10-16 28 views
0

我有一個包含'inspect_date'列的表。此列包含格式爲DD/MM/YYYY HH:MM:SS的日期。我試圖找到2012年4月至2012年9月間的記錄。我可以在WHERE子句中添加哪些內容以便能夠執行此操作?選擇日期介於[this]和[that]之間的行

我使用Microsoft SQL Server 2008

+0

是什麼列的數據類型?它是'datetime'還是'char/varchar'? –

回答

4
select * from table 
where inspect_date>= '04/01/2012 00:00:00.000' 
and inspect_date< '10/01/2012 00:00:00.000' 
+0

您可能希望包含'inspect_date'正好是'2012-04-01T00:00:00.000'的行所以......'inspect_date> ='2012-04-01T00:00:00.000和inspect_date <'2012-10-01T00:00:00.000''。 –

+0

你是正確的先生 – UnhandledExcepSean

3
WHERE inspect_date BETWEEN '2012-04-01' and '2012-09-30' 
+1

這不會返回'inspect_date'例如爲'2012-09-30 09:00:00'的行。 –

+0

這取決於。如果inspect_date是日期類型,那麼它將(並且在數據庫中將沒有2012-09-30 09:00:00值)。如果inspect_date是一個日期時間字段,那麼它需要是「BETWEEN'2012-04-01 00:00:00'和'2012-10-01 23:59:59'」 –

+0

是的,它會使用'日期「但正如你在問題中看到的那樣,在這種情況下它不是一個」約會「。至於使用'2012年10月1日23:59:59',如果是這一天,你仍然會錯過最後一秒的數值。比如'2012-10-01 23:59:59.997' –

0
SELECT * FROM ....WHERE 
inspect_date >= CAST('20120401' AS datetime) and 
inspect_date < CAST('20121001' AS datetime) 

for year selection you can use 

WHERE DATEPART(YEAR,inspect_date)=2012 
0

如果你需要的是靈活,嘗試之日起,除了像這樣:

WHERE MONTH(inspect_date) > 3 AND YEAR(inspect_date)= 2011 
OR MONTH(inspect_date) <= 5 AND YEAR(inspect_date)= 2012 
相關問題