【问题标题】:MySQL selecting rows where datetime is X days ago [duplicate]MySQL选择日期时间为X天前的行[重复]
【发布时间】:2013-10-28 15:10:10
【问题描述】:

我在数据库中有一个用于会议日程的表。它有 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

【问题讨论】:

标签: php mysql datetime


【解决方案1】:

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

你猜错了。字符串只能作为字符串排序。这意味着,除非您使用可排序的日期格式(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&lt;&gt; 运算符。

对于2 days ago 部分,您想知道MySql 有一个内置的NOW 变量you can sum/subtract days。如果你能正确设计你的数据库,你甚至不必接触 PHP(这是一件很理想的事情)。

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 我自己的独奏错了,我认为你的也是错的。
    • @Saeid87 你觉得呢?你甚至尝试过我的解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多