Select 使用数据库中的日期时间

Select with datetime from database

我的 select 有问题: 我有一个带有 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;
    }

但我想我需要重新安排日期。请帮帮我!!提前致谢

将查询更改为

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

日期函数return 仅日期如'2015-08-20'来自'2015-08-20'21:20:20'

我希望这对你有用。

尝试使用 DATE():

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

你需要在你的日期周围引用

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

不要将列包装在 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"

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