【问题标题】:How to get data from today's midnight to Yesterday's midnight如何获取今天午夜到昨天午夜的数据
【发布时间】:2020-09-30 03:30:26
【问题描述】:

我正在查找从今天午夜到昨天午夜的数据。如果今天的日期“2020-06-10 03:20:25”。我想在“2020-06-09 00:00:00”到“2020-06-10 00:00:00”之间创建

【问题讨论】:

  • select * from mytable where createdate > '2020-06-09 00:00:00' and createdate

标签: sql postgresql date-arithmetic


【解决方案1】:

假设createdatetimestamp 列:

where createdate >= date_trunc('day', current_timestamp) - interval '1 day'
  and createdate < date_trunc('day', current_timestamp) + interval '1 day';

【讨论】:

  • 我收到错误 ErrorMessage: 无法识别时区单位“日期”的时间戳
  • 上面的日期只是您感兴趣的范围的开始和结束日期的变量。换句话说,“2020-06-09 00:00:00”和“2020-06-10” 00:00:00' 。所以重写:where createdate &gt;= date_trunc(start_date, current_timestamp) - interval '1 day' and createdate &lt; date_trunc(end_date, current_timestamp) + interval '1 day';
  • @Sanjay:对不起,应该是'day'
  • 谢谢!!!就我而言,我需要每天运行报告,所以它是今天的日期,所以我可以在 start_date 和 end_date 中输入什么。它不应该是硬编码的。
  • current_timestamp “今天”的日期
【解决方案2】:
create table midnight_test(id int, createdate timestamptz);
insert into midnight_test values (1, '06/08/2020 17:15'), (2, '06/09/2020 00:00'), (3, '06/09/2020 13:25'), (4, '06/10/2020 00:00');
select * from midnight_test where createdate between '06/09/2020 00:00'::timestamptz and '06/10/2020 00:00'::timestamptz;

id |       createdate       
----+------------------------
  2 | 2020-06-09 00:00:00-07
  3 | 2020-06-09 13:25:00-07
  4 | 2020-06-10 00:00:00-07

【讨论】:

    【解决方案3】:

    假设createdatetimestamp的数据类型,可以这么简单:

    WHERE createdate >= CURRENT_DATE - 1
    AND   createdate <  CURRENT_DATE
    

    CURRENT_DATE 返回当前的date。您可以加/减integer 值来加/减天数。

    timestamp 相比,date 被强制转换为当天的第一个瞬间。所以date '2020-06-09' 等于timestamp '2020-06-09 00:00:00'

    顺便说一句,BETWEEN is almost always the wrong tool for timestamps. 见:

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多