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"
另一个不连接查询字符串的好理由。
我的 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"
另一个不连接查询字符串的好理由。