【发布时间】:2009-10-28 19:37:31
【问题描述】:
我正在尝试查找一个 MySQL 查询,该查询将从指定的日期时间获取下一个半小时的时间。我明确指的是下一个半小时,而不是下一个半小时。
例如:
- 如果日期时间是“2009-10-27 08:15:24”,答案是 "2009-10-27 08:30:00"
- 如果 日期时间是“2009-10-27 08:49:02”, 答案是“2009-10-27 09:30:00”。
我遇到了this page,它指的是 SQL Server,并且在该线程的末尾存在类似的问题。但又不太一样,它依赖于一个 MySQL 没有的功能。
以下是示例和预期返回值的完整列表:
2009-10-27 08:15:24 should return 2009-10-27 08:30:00
2009-10-27 08:49:02 should return 2009-10-27 09:30:00
2009-10-27 23:49:10 should return 2009-10-28 00:30:00
2009-10-27 10:30:00(.000001) should return 2009-10-27 11:30:00
(请注意,在第四个示例中,由于确切的半点 (10:30:00.0000000) 已经过去,因此会找到下一个半点。)
我试过用这种东西:
SELECT IF( (MINUTE(NOW()) < 30), HOUR(NOW()), (HOUR(NOW()) + 1) )
(之后会添加一个 CONCATed 字符串),但它会因为切换到另一天而失败,并且感觉本质上是“hacky”。
谁能推荐一种合适的算法?我不希望得到完整的答案(尽管那会很好!),但是关于算法类型的建议会有所帮助。我已经在纸上画了两个小时了!我有一种预感,使用模数可能有用,但我对使用它还不够熟悉。
答案将在稍后提供给 PHP 类,但如果可能的话,我宁愿在 SQL 级别实现它,因为查询的其余部分也有效地执行其他日期比较功能。
【问题讨论】: