-1

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

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

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
4

2 回答 2

1

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

你猜错了。字符串只能作为字符串排序。这意味着,除非您使用可排序的日期格式(YYYY/MM/DD其中一个:我不知道其他人),否则您必须解析所有结果并在 PHP 中自己进行计算(否则,2000 年 11 月 13 日将在 2000 年 1 月 14 日之前来)。或者,您可能想为您的列使用正确的类型:日期时间、日期或时间戳。一旦你这样做了,你就可以查询你的数据库并<>运算符比较日期。

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

于 2013-10-28T15:13:48.430 回答
0

尝试这个:

SELECT *
FROM schedules 
WHERE COALESCE(start, 0) < DATE_SUB(NOW(), INTERVAL 2 DAYS)
ORDER BY start
于 2013-10-28T15:35:21.343 回答