我的表中有一列设置为curret_timestamp,因此mysql数据库会在创建记录时自动输入时间戳。
我需要获取当天的所有记录。目前,我有这样的地方:
WHERE r.ts > DATE_SUB(NOW(), INTERVAL 1 DAY)
但是这给了我最后24小时。这意味着在早上它仍然显示昨天。那么我怎么能说'今天早上5点从今天开始给我r.ts
?'
答案 0 :(得分:1)
如果您希望所有带有时间戳的记录从当天晚上5点开始使用
SELECT * FROM t
WHERE r.ts > CONCAT(CURDATE(), ' 05:00:00')
如果您希望自上次使用上午5点以来所有记录都带有时间戳
SELECT * FROM t
WHERE r.ts > CONCAT(IF(CURTIME() < '05:00:00', DATE_SUB(CURDATE(), INTERVAL 1 DAY), CURDATE()), ' 05:00:00')
查询仅在00:00:00 - 04:59:59之间产生不同的结果,因此如果在那段时间内没有查询,则应使用第一个更容易的替代方案。
答案 1 :(得分:0)
你可以试试这个 -
select * from t
WHERE
DATE_FORMAT(t.ts,'%Y:%m:%d') = DATE_FORMAT(now(), '%Y:%m:%d') AND
DATE_FORMAT(t.ts,'%H:%i:%s') > STR_TO_DATE('05:00:00', '%H:%i:%s');
解释:第一个条件检查当前日期并匹配它。而不是检查时间,它必须大于凌晨5点。
答案 2 :(得分:-1)
WHERE r.ts >= CURDATE() + interval 5 hour