从今天凌晨5点开始获取所有`Timestamp`

时间:2013-11-27 09:13:07

标签: mysql

我的表中有一列设置为curret_timestamp,因此mysql数据库会在创建记录时自动输入时间戳。

我需要获取当天的所有记录。目前,我有这样的地方:

WHERE r.ts > DATE_SUB(NOW(), INTERVAL 1 DAY)

但是这给了我最后24小时。这意味着在早上它仍然显示昨天。那么我怎么能说'今天早上5点从今天开始给我r.ts?'

3 个答案:

答案 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点。

SQLFiddle

答案 2 :(得分:-1)

WHERE r.ts >= CURDATE() + interval 5 hour

SQLFiddle demo