-1

我想在 sql 语句中比较两个日期,如下所示:

$before_5_days = date("d.m.Y", strtotime( '-5 days' ) );
$GLOBALS['db']->query("DELETE FROM matches_of_comments WHERE flag=1 AND match_date >'$before_5_days'");

上面的查询删除了错误的字段。

match_date 列在 varchar 中,我无法更改它,我想将它与相同格式的 $before_5_days 进行比较。有没有像“strtotime”这样的函数可以在查询中使用来改变match_date的类型并进行比较???

4

3 回答 3

0

DELETE FROM matches_of_comments WHERE flag=1 AND DATE_FORMAT(match_date, '%Y-%m-%d') > DATE_SUB(CURDATE(), INTERVAL -5 DAY)

于 2013-08-27T15:10:40.317 回答
0

您可以使用 date_format 和 str_to_date,以满足您的需要,我认为这会起作用:

DELETE FROM matches_of_comments WHERE flag=1 AND date_format(STR_TO_DATE(match_date,'%d.%m.%Y'), '%d.%m.%Y') > '$before_5_days'
于 2013-08-27T15:13:14.650 回答
0

您可以在 MySQL 中执行此操作;无需做任何 PHP 日期数学:

DELETE FROM matches_of_comments
WHERE flag = 1
  AND STR_TO_DATE(match_date, '%d.%m.%Y') > CURRENT_TIMESTAMP - INTERVAL 5 DAY;

CURRENT_TIMESTAMP基于“5 天前”的日期时间。要仅基于日期,请使用CURDATE()而不是CURRENT_TIMESTAMP

DELETE FROM matches_of_comments
WHERE flag = 1
  AND STR_TO_DATE(match_date, '%d.%m.%Y') > CURDATE() - INTERVAL 5 DAY;
于 2013-08-27T15:18:02.387 回答