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


MySQL selecting rows where datetime is X days ago

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

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

数据库中的示例:1378033200显示为 01 九月 2013

我的问题是,我想拉取会议并在 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

但是 PHPMyAdmin 显示开始和结束的列是 瓦尔查尔(15) 所以我想它应该是日期时间兼容的。

你猜错了。字符串只能作为字符串排序。这意味着,除非您使用可排序的日期格式(YYYY/MM/DD是一种:我不知道其他格式),否则您必须解析所有结果并在PHP中自己进行计算(否则,13/11/2000将在14/01/2000之前)。或者,您可能希望为列使用正确的类型:日期时间、日期或时间戳。完成此操作后,您将能够查询数据库并与<>运算符比较日期。

对于2 days ago部分,您想知道MySql有一个内置的NOW变量,您可以对天数求和/减去。如果你能正确地设计你的数据库,你甚至不必接触PHP(这是一件值得期待的事情)。

试试这个:

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