MySQL选择日期时间为X天前的行

时间:2013-10-28 15:10:11

标签: php mysql datetime

我在数据库中有一个表用于会议日程安排。它有2列名为startend,因为我无法访问用新数据填充此表的php脚本,我不确定它是以哪种格式。

但PHPMyAdmin显示开始和结束的列是varchar(15)所以我想它应该是与datetime兼容的。

DB中的示例:1378033200 显示为2013年9月1日

我的问题是,我想拉开会议并在html页面中显示它们,但我不希望出现超过2天(服务器时间)的会议。什么是查询?

SELECT * FROM schedules ORDER BY start

这样的东西
SELECT * FROM schedules ORDER BY start WHERE start > 2 days ago

我尝试了这个,但似乎什么也没做!

SELECT *
FROM schedules 
WHERE COALESCE(start, 0) < CURDATE() - INTERVAL 2 DAY 
ORDER BY start

2 个答案:

答案 0 :(得分:1)

  

但PHPMyAdmin显示了开始和结束的列   varchar(15)所以我想它应该与datetime兼容。

你猜错了。字符串只能作为字符串排序。这意味着,除非你使用可排序的日期格式(YYYY/MM/DD是一个:我不知道其他人)你将不得不解析所有结果并自己在PHP中进行计算(否则,13 / 11/2000将于2000年1月14日之前到来)。或者,您可能希望为列使用正确的类型:datetime, date or timestamp。一旦你这样做,you'll be able to query your db and compare dates<>运营商合作。

对于2 days ago部分,您想知道MySql有一个内置NOW变量you can sum/subtract days。如果你正确设计你的数据库,你甚至不需要触摸PHP(这是一个令人期待的事情)。

答案 1 :(得分:0)

试试这个:

SELECT *
FROM schedules 
WHERE COALESCE(start, 0) < DATE_SUB(NOW(), INTERVAL 2 DAYS)
ORDER BY start