从数据库中选择日期时间

时间:2015-05-14 11:47:17

标签: php mysql sql php-5.3

我的选择有问题: 我有一个带有2个文本框的表单: date_min和date_max。这个日期来自控制器:

2015-05-15

现在在数据库中我的日期:c_win像这样:

2015-08-20 21:20:20

在我的查询中:

if ($date_min != '' && $date_max != ''){
        $aFilter = ' AND c_win > '.$date_min.' AND c_ig.date_gain < '.$date_max;
    }

但我认为我需要重新审视日期。请帮帮我!! Thx提前

4 个答案:

答案 0 :(得分:2)

更改查询

 $aFilter = ' AND date(c_win) > '.$date_min.' AND date(c_ig.date_gain) < '.$date_max;

日期功能仅返回“2015-08-20 21:20:20”中的“2015-08-20”日期

我希望这对你有用。

答案 1 :(得分:1)

尝试使用DATE()

if ($date_min != '' && $date_max != ''){
    $aFilter = ' AND DATE(c_win) > "' . $date_min . '" AND DATE(c_ig.date_gain) < "' . $date_max . '"';
}

答案 2 :(得分:1)

您的日期需要报价

$aFilter = ' AND c_win > "'.$date_min.'" AND c_ig.date_gain < "'.$date_max.'"';

答案 3 :(得分:1)

不要将列包装在DATE()中,因为优化器不能在列上使用索引..加上我将使用PDO或mysqli绑定变量而不是将它们连接起来..

当我在代码中使用日期输入进行日期比较时,我几乎总是使用:

SELECT ...
  FROM table t
 WHERE t.time >= :min_date
   AND t.time <  :max_date + INTERVAL 1 DAY

这完全覆盖了日期之间的所有时间而没有打破索引。 它还假设提供的日期是包容性的..这对于UI来说是合乎逻辑的。

在你的情况下,这将是:

$aFilter = ' AND c_win >= "'.$date_min.'" AND c_ig.date_gain < "'.$date_max.'" + INTERVAL 1 DAY';

奖励信息

如果您想知道为什么查询运行但没有给出正确的结果..

AND c.win > 2008-05-13 AND c_ig.date_gain < 2015-05-05 
没有引号的

将整数计算为:

AND c.win > 1990 AND c_ig.date_gain < 2005

然后隐式转换为:

AND c.win > "1990-01-01 00:00:00" AND c_ig.date_gain < "2005-01-01 00:00:00"

不连接查询字符串的另一个好理由。