【问题标题】:How to select records from last 24 hours using SQL?如何使用 SQL 选择过去 24 小时的记录?
【发布时间】:2009-12-11 14:49:02
【问题描述】:

我正在寻找可用于检索过去 24 小时记录的where 子句?

【问题讨论】:

  • 这些记录上是否有时间戳字段?

标签: sql datetime


【解决方案1】:

MySQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - INTERVAL 1 DAY

SQL Server:

SELECT  *
FROM    mytable
WHERE   record_date >= DATEADD(day, -1, GETDATE())

Oracle:

SELECT  *
FROM    mytable
WHERE   record_date >= SYSDATE - 1

PostgreSQL:

SELECT  *
FROM    mytable
WHERE   record_date >= NOW() - '1 day'::INTERVAL

Redshift:

SELECT  *
FROM    mytable
WHERE   record_date >= GETDATE() - '1 day'::INTERVAL

SQLite:

SELECT  *
FROM    mytable
WHERE   record_date >= datetime('now','-1 day')

MS Access:

SELECT  *
FROM    mytable
WHERE   record_date >= (Now - 1)

【讨论】:

  • 我尝试查询 mysql,但如果它是凌晨 2 点,例如,我会从 00 - 02 AM 获取记录。两个小时而不是 24 小时。有什么想法吗?
  • 我非常喜欢这里提供的解决方案,只是我在 MySQL 中指出的是 Guillaume Flandre 解决方案的性能更快。
  • 在 Amazon Redshift 中,我收到 function getdate() does not exist。将其替换为 current_date 并且效果很好。
  • 这个答案让我希望有一个“星”按钮,因为我想为它添加书签。
  • @Manos 在 MySQL 中,CURDATE() 似乎没有返回带有时间部分的日期,所以它转到00。我通过使用NOW() 而不是CURDATE() 来修复它。
【解决方案2】:
SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

【讨论】:

  • 如果记录存储为DATETIME,这将选择上一个日期的所有记录,忽略时间部分。在23:59:59 运行,查询将返回最近48 小时的所有记录,而不是24
  • 如果您想从日期时间字段中选择过去 24 小时,请将 'curate()' 替换为 'now()'。这也包括时间。
【解决方案3】:
SELECT * 
FROM tableName 
WHERE datecolumn >= dateadd(hour,-24,getdate())

【讨论】:

    【解决方案4】:

    MySQL:

    SELECT * 
    FROM table_name
    WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR)
    

    间隔可以是年、月、日、小时、分钟、秒

    例如,过去 10 分钟内

    SELECT * 
    FROM table_name
    WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
    

    【讨论】:

    • 这是最能回答特定问题的答案:如何返回前 24 小时(从现在开始),而不是前 24 小时(建议前一天的所有结果)。这满足了我的要求,这得到了我的支持。编辑:值得一提的是 table_name.the_date 列应该是时间戳。
    【解决方案5】:

    您好,我现在从原始帖子过去了很多时间,但我遇到了类似的问题,我想分享一下。

    我有一个格式为 YYYY-MM-DD hh:mm:ss 的日期时间字段,我想访问一整天,所以这是我的解决方案。

    MySQL 中的 DATE() 函数:提取日期或日期时间表达式的日期部分。

    SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09'
    

    有了这个,我得到了这一天所有的行寄存器。

    我希望它对任何人都有帮助。

    【讨论】:

    • 这是唯一一个对我有用的 mySQL。出于某种原因,当我尝试 SELECT * FROM myTable WHERE myDate > DATE_SUB('2018-06-13 00:00:00', INTERVAL 24 HOUR);我仍在获取 2018-06-14 的记录。
    • 这会在每一行上运行一个函数,并且不会从索引中受益。对于少量数据或一次性操作还可以,对于大型数据集的重复使用则不太好。
    【解决方案6】:

    在 postgres 中,假设您的字段类型是时间戳:

    select * from table where date_field > (now() - interval '24 hour');

    【讨论】:

      【解决方案7】:

      在 SQL Server 中(过去 24 小时):

      SELECT  *
      FROM    mytable
      WHERE   order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE()
      

      【讨论】:

      • 当您已经在查找执行该查询后的最后 24 小时时,为什么还需要添加“and order_date = DateAdd(DAY, -1, GETDATE())” 就是这样!
      【解决方案8】:
      select ...
      from ...
      where YourDateColumn >= getdate()-1
      

      【讨论】:

        【解决方案9】:

        如果考虑的时间戳是 UNIX 时间戳 您需要先将 UNIX 时间戳(例如 1462567865)转换为 mysql 时间戳或数据

        SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
        

        【讨论】:

        • 假设使用的引擎是 MySQL,因为 FROM_UNIXTIME() 是 MySQL 函数。对于 SQL Server 使用:SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField) 如果您在 SQL Server 2016 及更高版本中需要毫秒精度,请使用:SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', DateField)
        • 这对每一行运行一个函数,并且不会从索引中受益。对于少量数据或一次性操作还可以,对于大型数据集的重复使用则不太好。
        【解决方案10】:

        未指定哪个 SQL,SQL 2005 / 2008

        SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate())
        

        如果您使用的是 2008 年精度更高的日期类型,请改用新的 sysdatetime() 函数,如果在内部使用 UTC 时间交换到 UTC 调用,则同样如此。

        【讨论】:

          【解决方案11】:

          在 Oracle 中(过去 24 小时):

          SELECT  *
          FROM    my_table
          WHERE   date_column >= SYSDATE - 24/24
          

          如果出于任何原因,您有未来日期的行,您可以使用 between,如下所示:

          SELECT  *
          FROM    my_table
          WHERE   date_column BETWEEN (SYSDATE - 24/24) AND SYSDATE
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-26
            • 1970-01-01
            • 1970-01-01
            • 2014-09-17
            • 2011-10-15
            • 1970-01-01
            • 1970-01-01
            • 2019-05-21
            相关资源
            最近更新 更多