2013-08-06 48 views
0

我有兩個查詢使用between子句產生日期範圍,其中日期通過VB.net程序傳入:日期之間的查詢只返回結果如果選定日期等於或大於數據中的日期

select 
w.plate, 
Description, 
Date_in, 
time_in, 
Date_out, 
Time_out, 
Date_out-Date_in as "Days on Site", 
Time_out-Time_in as "Duration on Site (Hrs)" 
from tbl_stay S 
inner join tblwhitelist W 
on S.plate=W.plate 
where Date_in between "1/06/2013" and "25/09/2013" 

select 
Plate, 
Date_in, 
Time_in, 
Date_out, 
Time_out, 
Date_out-Date_in as "Days on site", 
Time_out-Time_in as "Duration on site (Hrs)" 
from tbl_stay 
where plate not in (Select plate from tblwhitelist) 
and date_in between "1/07/2013" and "1/08/2013" 

爲了測試,我有具有日期「25/07/2013」​​兩者進出數據塊。這些查詢只好像產生的結果,如果一個月的天比數據(25)

例如提到的天更高:在查詢上述日期:

Date_in between "1/06/2013" and "25/09/2013" 

會產生結果,但是

date_in between "1/07/2013" and "1/08/2013" 

不會。即使包含在測試數據(25/07/2013)中的日期在這兩個範圍內。

我完全難住了。這裏可能會發生什麼?任何援助將不勝感激

+0

字段「date_in」的數據tyoe是什麼?你描述的行爲看起來好像它的比較字符串 –

+0

「25/06/2013」​​和「25/08/2013」​​之間的'返回結果嗎? –

+1

您使用的格式取決於MySQL設置。嘗試使用不依賴於設置的格式之一,例如DATE'2013-01-07'和DATE'2013-01-08''之間的'...和date_in。關於日期格式的更多信息是[here](http://dev.mysql.com/doc/refman/5.0/en/date-and-time-literals.html) –

回答

0

答案是不使用之間。

將WHERE子句中的該行分隔爲兩部分,並使用> =或a>來明確指定是否包含該日期。

AND date_in > "1/07/2013"date_in >= "1/07/2013"

AND date_in < "1/08/2013"date_in <= "1/08/2013"

1

當您使用您比較文本字符串,而不是日期雙引號。 「01/07/2013」​​的字面含義小於「25/01/2013」​​,基本上這些字符串是逐字比較的。如果您查看兩個字符串中的第一個字符,則0小於2.

相關問題