【问题标题】:How do I find records added to my database table in the past 24 hours?如何查找过去 24 小时内添加到我的数据库表中的记录?
【发布时间】:2010-09-08 17:37:55
【问题描述】:

我特别使用 MySQL,但我希望有一个跨供应商的解决方案。我正在使用 NOW() 函数将时间戳添加为每条记录的列。

INSERT INTO messages 
(typeId, messageTime, stationId, message) 
VALUES 
(?, NOW(), ?, ?)

【问题讨论】:

    标签: sql


    【解决方案1】:
    SELECT * FROM messages WHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= messageTime
    

    【讨论】:

    • 不幸的是,每个数据库都有自己的获取当前日期的函数。
    【解决方案2】:

    SQL Server 查询是:

    Select *
    From Messages
    Where MessageTime > DateAdd(dd, -1, GetDate())
    

    据我所知(未经测试!)MySQL 等价物是

    Select *
    From Messages
    Where MessageTime > ADDDATE(NOW(), INTERVAL -1 DAY)
    

    【讨论】:

      【解决方案3】:

      没有跨数据库解决方案,因为它们中的大多数都有自己的日期处理(主要是区间表示)语法和语义。

      PostgreSQL 中是

      SELECT * FROM messages WHERE messagetime >= messagetime - interval '1 day'
      

      【讨论】:

        【解决方案4】:

        对于 Sybase SQL Anywhere:

        Select * From Messages Where MessageTime > dateadd( day, -1, now() )
        

        【讨论】:

          【解决方案5】:

          对于甲骨文

          SELECT * FROM messages WHERE messageTime > SYSDATE - 1
          

          (伪变量 SYSDATE 包含时间,因此 sysdate -1 将给出最后 24 小时)

          【讨论】:

            【解决方案6】:

            如果您从基于 API 的客户端访问它(我猜是因为查询中的“?”),您可以从您的程序而不是通过 SQL 执行此操作。

            注意:其余为 JDBC 语法,其他 API/语言将有不同的语法,但在概念上应该相同。

            在插入端做

            PreparedStatement stmt = connection.prepareStatement( 
                "INSERT INTO messages " +
                "(typeId, messageTime, stationId, message) VALUES " +
                "(?, ?, ?, ?)" );
            stmt.setInt(1, typeId);
            stmt.setDate(2, new java.sql.Date(System.currentTimeMillis()));
            stmt.setInt(3, stationId);
            stmt.setString(4, message);
            

            在查询方面做:

            PrepatedStatement stmt = connection.prepareStatement(
               "SELECT typeId, messageTime, stationId, message " +
               "from messages where messageTime < ?");
            long yesterday = System.currentTimeMillis() - 86400000; // 86400 sec/day
            stmt.setDate(1,new java.sql.Date(yesterday));
            

            这应该以可移植的方式工作。

            【讨论】:

              猜你喜欢
              • 2011-08-28
              • 1970-01-01
              • 2019-05-21
              • 1970-01-01
              • 2011-12-26
              • 1970-01-01
              • 2014-09-17
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多