【问题标题】:MySQL select row dateandtime > NOWMySQL选择行日期和时间>现在
【发布时间】:2012-02-20 15:02:09
【问题描述】:

我正在尝试创建一个涉及聚合一段时间内发送的电子邮件的 cron 作业。

我需要执行一个查询,例如

SELECT count(*) from table where action_time < NOW();

我该怎么办?

我知道 CURDATE()CURTIME() 但我需要比较时间和日期,以便在事件发生后的确切分钟内执行操作,CURTIME 意味着在午夜我会遇到问题.

编辑:CURTIME() 仅包括时间,因此操作时间为 23:59:59 的数据库中的作业不会在 00:00:59 运行 - 一分钟后(因为后者不大于首先)

我可以使用日期时间或时间戳,但我将使用什么作为函数进行比较(我在上面使用 NOW(),但这不起作用)

更新:我尝试使用 SELECT count(*) from table where UNIX_TIMESTAMP(action_time)

【问题讨论】:

  • action_time是什么数据类型,应该是DATETIME
  • 这是日期时间,尽管我正在考虑使用 TIMESTAMP 使其更具可比性,正如 Mchl 建议的那样

标签: mysql


【解决方案1】:

CURTIME()NOW() 实际上都将当前时间返回到秒。 NOW() 也返回日期部分。不确定您的问题是什么。

【讨论】:

  • 问题是 CURTIME() 不包括日期,我不确定,所以如果我每分钟都有一个 cron 运行,那么针对 11:59:59 的作业将不会在 00 运行: 00:59 因为后者不大于第一个
  • 对不起,我的意思是在下一个周期运行 cron 时,action_time 为 11:59:59 的作业不会运行
  • 我现在看到了(我想)。您应该做的是将最后一次执行 cron 作业的时间(使用日期和时间)存储在数据库中,并让您的查询与该时间而不是 NOW() 进行比较
  • 我更清楚地编辑了我的问题。我可以看到必须有一种方法可以做到这一点,尽管它很简单。也许我应该考虑将其存储为 unix 时间戳
  • 只要把它存储为mysql的TIMESTAMP就行了。
【解决方案2】:

使用 mysql 中的时间戳并与您的 *nix 环境中的时间进行比较。

【讨论】:

    【解决方案3】:

    我试过了

    SELECT count(*) from table where UNIX_TIMESTAMP(action_time) < UNIX_TIMESTAMP(NOW());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      相关资源
      最近更新 更多