2011-02-04 122 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')";