我们的应用程序中有每周重复发生的事件,并决定将每个事件的开始和结束时间存储为从一周开始(星期日上午 12 点)开始的秒数。这使得查询、排序等变得更加容易。
但是,有一个小问题:如果我们想获取在接近一周重置的时间发生的事件,该事件可以弥补这一差距,这使得查询变得困难。
一个正常的查询,在 99% 的时间都有效,用于获取给定时间在记录的开始时间和结束时间之间的记录。
time = 216000 # Tuesday, 12:00PM
SELECT * FROM events WHERE start_time <= 216000 AND end_time > 216000
困难的部分是当有一个事件从星期六晚上 11 点开始,到星期天凌晨 2 点结束时:
time = 3600 # Sunday, 1am
SELECT * FROM events WHERE start_time <= 3600 AND end_time > 3600
这不会返回任何内容start_time
,因为它不会小于 3600,因为它在每周周期结束时开始。
我一直在绞尽脑汁想提出一个好的解决方案,但到目前为止还不够,所以我想把它开放给 SO 看看是否有我没有想到的解决方案的。我有一种感觉,我可以使用一些简单的数学方程式来完成这项工作,但数学不是我最好的科目:)
如果我需要更好地解释或给出更好的例子,请告诉我。
谢谢!