【问题标题】:Find rows in each n hours between date and date + n days在 date 和 date + n 天之间的每 n 小时内查找行
【发布时间】:2014-03-16 04:09:48
【问题描述】:

我有一张这样的桌子

start_date          | days | hours
------------------------------------
2014-01-20 01:54:00 | 15   | 7

我需要在start_date 的 7 小时内获取所有行,例如从 2014 年 1 月 20 日开始到 2014 年 2 月 4 日结束。如果我每分钟执行一次脚本,例如,当日期和时间为2014-01-20 01:54:002014-01-20 08:54:00 等时,我会得到上面的行。

我已经可以从start_datestart_date + days range' 中获取所有行了

SELECT
    [fields..]
FROM 
    `table`
WHERE
    `start_date` >= NOW() AND
    `start_date` <=  NOW() + INTERVAL `days` DAY

关于实现或更新我的数据库以解决此问题的逻辑的一些建议?

编辑:

添加了PHP标签,所以,如果最初的想法在数据库中实现很复杂,任何人都可以告诉我如何将逻辑从数据库传递到应用程序。

【问题讨论】:

    标签: php sql date logic


    【解决方案1】:

    因此,您希望表中的所有行都是日期后 7 小时的倍数。

    我们的想法是获取两个日期之间的差异。然后取时间差和日期差,将所有内容转换为秒并进行一些模运算。我认为以下是这样做的:

    select t.*
    from table t
    where `start_date` >= NOW() AND
          `start_date` <=  NOW() + INTERVAL `days` DAY and
          mod(to_days(subtime(start_date, now())*3600 + timetosec(subtime(start_date, now())), 
              hours * 60 * 60
             ) = 0;
    

    【讨论】:

    • 我需要在 n 小时(从 1 到 24)的基础上找到所有行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2017-02-14
    相关资源
    最近更新 更多