【问题标题】:How to get data from previous day如何获取前一天的数据
【发布时间】:2020-06-19 07:50:24
【问题描述】:

我想获取前一天的数据,但我的 SQL 语句不起作用。 我收到一个错误:

ORA-00904:“DATEDIFF”:无效标识符

SELECT * 
FROM table_name 
WHERE DATEDIFF(day,table_name .creation_dt ,GETDATE()) = 1;

SELECT *
FROM table_name 
WHERE DATEDIFF(DAY, DATEADD(DAY, -1 , CURRENT_TIMESTAMP), creation_dt) = 0;

SELECT *
FROM table_name 
WHERE `date` = creation_dt.CURDATE() - INTERVAL 1 DAY;

感谢卡蒂

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    对于 oracle 前一天,您可以使用 sysdate - 1

    select * from table_name where trunc(date) = trunc(sysdate)-1
    

    【讨论】:

      【解决方案2】:

      我想获取前一天的数据,

      在 Oracle 中,我建议:

      where table_name.creation_dt >= trunc(sysdate) - interval '1' day and
            table_name.creation_dt < trunc(sysdate)
      

      这可以利用creation_dt 上的索引。我还建议您使用 interval 语法来处理日期。虽然你可以使用trunc(sysdate) - 1,但在我看来这有点过时了(Oracle 并不总是支持interval)。

      您也可以更简洁地表述为:

      where trunc(table_name.creation_dt) = trunc(sysdate) - interval '1' day 
      

      但是,这对优化器来说可能更具挑战性。

      【讨论】:

        【解决方案3】:

        由于 Oracle 中的 DATE 数据类型同时包含日期和时间,并且“前一天”从 00:00:00 小时 (:min:sec) 开始,然后截断 SYSDATE “重置”时间以提及 00:00:00,而减去1 day 会将您移动到昨天开始的午夜。

        SQL> select trunc(sysdate) - 1 from dual;
        
        TRUNC(SYSDATE)-1
        -------------------
        18.06.2020 00:00:00
        

        所以:

        select *
        from your_table
        where date_column >= trunc(sysdate) - 1;
        

        【讨论】:

          【解决方案4】:

          DATEDIFF 是 SQL Server 特定的函数。您使用 SQL Server 还是其他数据库引擎?

          【讨论】:

          • 这应该是一条评论。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-19
          • 1970-01-01
          • 1970-01-01
          • 2023-02-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多