2011-02-04 121 views
4

嘿傢伙。我在我的sql查詢中使用BETWEEN得到了一些奇怪的結果,並且想知道是否有人可以幫助我理解爲什麼我得到我得到的結果。MySQL選擇日期範圍問題

我在搜索dd/mm/yyyy格式的日期範圍。所以我想選擇某個日期範圍內的所有條目。

$dbSearchRecords_result = "SELECT * FROM $tbl_name WHERE Date BETWEEN '$DateFrom_order' AND '$DateTo_order'"; 

$dbSearchRecords_result = mysql_query($dbSearchRecords_result); 

我正在然後從數組調用while語句的結果現在

while ($row = mysql_fetch_array($dbSearchRecords_result)){ 

如果我搜索BETWEEN 12/02/2011 14/02/2011有日期從13返回/ 12/2010。

然而,如果我搜索12/02/2011 13/02/201我沒有得到13/12/2010的結果。

任何想法將不勝感激。

乾杯。

+1

你確定你的日期變量實際上是格式化爲正確的日期? – willdanceforfun 2011-02-04 10:54:20

+0

您是否檢查過從PHP生成的SQL語句是否您期望的? – macarthy 2011-02-04 10:55:21

回答

6

BETWEEN運營商是最有可能您的閱讀範圍爲字符串。 From the book:

爲了獲得最佳效果使用BETWEEN 與日期或時間值時,使用CAST() 將這些值顯式轉換爲 所需的數據類型。示例:如果 將DATETIME與兩個DATE 值進行比較,請將DATE值轉換爲 DATETIME值。如果在與DATE比較中使用 字符串 常量(如「2001-1-1」),則將字符串 轉換爲DATE。

所以,儘量:

SELECT * FROM `mytable` 
WHERE `date` BETWEEN CAST('2011-01-02' AS DATE) AND CAST('2011-12-02' AS DATE) 
5

MySQL的這種格式的需求值做一個適當的對比:

YYYY-MM-DD 

你可以使用STR_TO_DATE將字符串轉換成合適的格式。

很明顯,Date字段需要是DATEDATETIME類型。

1

嘗試將值作爲日期格式..在

$dbSearchRecords_result = "SELECT * FROM $tbl_name WHERE Date BETWEEN DATE('$DateFrom_order') AND DATE('$DateTo_order')";