【问题标题】:How to list records with date from the last 10 days?如何列出最近 10 天的记录?
【发布时间】:2011-07-24 20:12:56
【问题描述】:
SELECT Table.date FROM Table WHERE date > current_date - 10;

这适用于 PostgreSQL 吗?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    是的,这在 PostgreSQL 中确实有效(假设列“date”的数据类型为 date) 你为什么不试试呢?

    标准的 ANSI SQL 格式是:

    SELECT Table.date 
    FROM Table 
    WHERE date > current_date - interval '10' day;
    

    我更喜欢这种格式,因为它更容易阅读(但它与current_date - 10 相同)。

    【讨论】:

    • 查询应该是:SELECT Table.date FROM Table WHERE date > current_date - interval '10 day';
    • @user2694306: interval '10 day' 是 Postgres 语法。 interval '10' day是基于SQL标准的语法,Postgres也支持
    • 间隔应该是 910 实际上给了你从今天开始的 11 天。
    • @DavidHe:这与原始答案的作用相同。哪个使用10,而不是9
    • 请注意:在 Redshift 上,@user2694306 的公式有效:间隔“10 天”。间隔“10”天不适用于 Redshift。
    【解决方案2】:

    http://www.postgresql.org/docs/current/static/functions-datetime.html 显示可用于处理日期和时间(和间隔)的运算符。

    所以你想要

    SELECT "date"
    FROM "Table"
    WHERE "date" > (CURRENT_DATE - INTERVAL '10 days');
    

    上面的操作符/函数都有详细记录:

    【讨论】:

      【解决方案3】:

      我的测试(和PostgreSQL dox)的理解是引号需要与其他答案不同,并且还应该包括这样的“天”:

      SELECT Table.date
        FROM Table 
        WHERE date > current_date - interval '10 day';
      

      在此处演示(您应该能够在任何 Postgres 数据库上运行它):

      SELECT DISTINCT current_date, 
                      current_date - interval '10' day, 
                      current_date - interval '10 days' 
        FROM pg_language;
      

      结果:

      2013-03-01  2013-03-01 00:00:00 2013-02-19 00:00:00
      

      【讨论】:

      • 实际上,我没有注意到布拉德利的回答是正确的。无论如何,我会把我的留在这里作为证明这是正确的方法。接受的答案是错误的(至少对于我正在运行的 Postgre 版本)
      【解决方案4】:

      建议的答案似乎已经解决了这些问题。但作为补充,我建议使用 PostgreSQL 的 NOW() 函数。

      SELECT Table.date 
      FROM Table 
      WHERE date > now() - interval '10' day;
      

      此外,您甚至可以指定非常方便的时区。

      NOW () AT TIME ZONE 'Europe/Paris'
      

      【讨论】:

        【解决方案5】:

        如果您想使用任何给定日期而不是当前日期,只需概括查询:

        SELECT Table.date
          FROM Table 
          WHERE Table.date > '2020-01-01'::date - interval '10 day'
        

        【讨论】:

          【解决方案6】:

          从 Postgres 9.4 开始,您可以使用 AGE 函数:

          SELECT Table.date FROM Table WHERE AGE(Table.date) <= INTERVAL '10 day';

          【讨论】:

            【解决方案7】:

            我会检查数据类型。

            current_date 具有“日期”数据类型,10 是数字,而 Table.date - 您需要查看您的表格。

            【讨论】:

              【解决方案8】:

              你也可以在之间使用:

              SELECT Table.date
                FROM Table 
                WHERE date between current_date and current_date - interval '10 day';
              

              【讨论】:

              • between 必须首先具有最低值,所以这将作为SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date; 正确完成
              猜你喜欢
              • 2015-11-07
              • 1970-01-01
              • 2016-08-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-07-23
              • 1970-01-01
              • 2020-06-06
              相关资源
              最近更新 更多