MySQL选择日期范围问题

时间:2011-02-04 10:50:39

标签: mysql

嘿伙计们。我在我的SQL查询中使用BETWEEN得到了一些奇怪的结果,我想知道是否有人可以帮助我理解为什么我得到了我得到的结果。

我正在以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,则会有一个从2010年12月13日返回的日期。

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

任何想法都会受到最高的赞赏。

干杯。

3 个答案:

答案 0 :(得分:7)

BETWEEN运算符最有可能将字符串作为字符串读取。 From the book:

  

使用BETWEEN时获得最佳效果   使用日期或时间值,使用CAST()   显式地将值转换为   所需的数据类型。示例:如果   你将DATETIME与两个DATE进行比较   值,将DATE值转换为   DATETIME值。如果你使用字符串   例如'2001-1-1'中的常数   与DATE比较,强制转换字符串   到了日期。

所以,试试:

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

答案 1 :(得分:5)

MySQL需要这种格式的值来进行适当的比较:

YYYY-MM-DD

您可以使用STR_TO_DATE将字符串转换为正确的格式。

另外,Date字段必须属于DATEDATETIME类型。

答案 2 :(得分:1)

尝试将值格式化为DATE ..,如

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