我有一个包含这些字段的 EventSet
表:
start_day
(例如星期一)开始时间
(例如 14:20:00)
我想创建一个查询,通过比较特定记录的日期和当前时间来选择特定记录。
因此,借助 PHP 的 strtotime();
方法的一点帮助,我的目标类似于:
SELECT *
FROM
`EventSet`
WHERE
DATE_FORMAT(NOW(), '%W %H:%i:%s') <=
date('%W %H:%i:%s', strtotime('start_day start_time'))
最后的 date();
部分当然是纯 PHP
到目前为止,我已经尝试将 DATE_FORMAT
与 CONCAT_WS
以及 TIMESTAMP();
/UNIX_TIMESTAMP();
一起使用,但是我显然把事情搞砸了。
SELECT *
FROM
`EventSet`
WHERE
DATE_FORMAT(NOW(), '%W %H:%i:%s') <=
DATE_FORMAT(CONCAT_WS(' ', start_day, start_time), '%W %H:%i:%s')
我在这里和网上浏览了许多类似的问题,但它们都已经有一个日期字段可以使用,并且不需要连接任何东西,所以我不能使用它们中的任何一个。
最佳答案
您正在使用 <=
.这不适用于星期几的名称,因此将逻辑分为两部分:一个用于星期几,另一个用于时间:
SELECT e.*
FROM `EventSet` e
WHERE DATE_FORMAT(NOW(), '%W') = $start_day AND
DATE_FORMAT(NOW(), '%H:%i:%s') <= DATE_FORMAT($start_time, '%H:%i:%s')
注意:我离开了date_format()
对于时间比较,我更喜欢:
SELECT e.*
FROM `EventSet` e
WHERE DATE_FORMAT(NOW(), '%W') = $start_day AND
TIME(NOW())) <= TIME($start_time)
关于php - 替代 MySQL 中的 strtotime(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808831/