【问题标题】:sql records in last few hours最近几个小时的sql记录
【发布时间】:2010-08-10 23:46:17
【问题描述】:

我在 mysql 表中有记录,我想知道过去 3、7 和 12 小时内有多少记录。那将是什么sql?我的日期字段格式为

2010-08-09 09:52:27 
2010-08-09 09:52:27 
2010-08-09 09:52:27 
2010-08-09 10:44:46 
2010-08-09 10:44:46 
2010-08-09 11:58:27 
2010-08-09 14:48:22 
2010-08-09 14:48:22 

【问题讨论】:

    标签: php sql mysql


    【解决方案1】:

    过去三个小时:

    WHERE column BETWEEN DATE_SUB(NOW(), INTERVAL 3 HOUR)
                     AND NOW()
    

    过去七个小时:

    WHERE column BETWEEN DATE_SUB(NOW(), INTERVAL 7 HOUR)
                     AND NOW()
    

    过去十二小时:

    WHERE column BETWEEN DATE_SUB(NOW(), INTERVAL 12 HOUR)
                     AND NOW()
    

    如果您想将数据指定为字符串,请使用:

    WHERE column BETWEEN DATE_SUB(STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T'), INTERVAL 3 HOUR)
                     AND STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T')
    

    ...老实说,您也可以使用它:

    WHERE column BETWEEN STR_TO_DATE('2010-07-08 04:57:45', '%Y-%m-%d %T')
                     AND STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T')
    

    如果这不起作用,那么我想知道该列是否将值存储为字符串/varchar 而不是 DATETIME。

    参考:

    【讨论】:

    • 我使用了以下查询,但它没有给我正确的结果 $sql = 'SELECT * FROM order WHERE myDateField BETWEEN DATE_SUB("2010-07-08 07:57:45", INTERVAL 3 小时)和“2010-07-08 07:57:45”';
    • @user295189:使用单引号,而不是双引号。如果您使用的是字符串,请使用STR_TO_DATE('2010-07-08 07:57:45', '%Y-%m-%d %T') 将字符串可靠地转换为 DATETIME
    • 没用.. 仍然只给我 2 条相同日期和时间的记录 -07-08 07:57:45'
    • @user295189:查看我的更新 - 这适用于我在 MySQL 4.1 上,我唯一能想到的是您的列不是 DATETIME 数据类型
    【解决方案2】:

    假设将来没有记录带有时间戳,您可以使用:

    WHERE myDateField > DATE_SUB(NOW(), INTERVAL 3 HOUR)
    

    过去三个小时的记录,以及 7 小时和 12 小时的记录。

    【讨论】:

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