【问题标题】:Finding out the number of days between 2 timestamps in SQL找出SQL中2个时间戳之间的天数
【发布时间】:2020-09-21 11:33:47
【问题描述】:

我正在努力弄清楚如何计算两个时间戳之间的时间差

我的目标——

一群客户在 XXXX 订购,然后在 XXXX(不同日期)取消订单,我想知道一年内有多少客户取消订单。因此,如果客户在第 366 天取消订单,他们就不会出现在我的搜索结果中。

我尝试了几个不同的函数,我能找到的最接近的是 INTERVAL

示例 - WHERE 取消日期 >= order_date(365 天内)

我希望这是有道理的,我不会遗漏任何明显的东西!

干杯 奥利(业余)

【问题讨论】:

  • 样本数据和期望的结果会有所帮助。

标签: sql postgresql date-arithmetic


【解决方案1】:

您必须非常小心所谓的“一年”。例如,考虑以下数据:

insert into some_table (id, order_date, cancel_date)
  values (1, now() - interval '30 day', now() - interval '10 day'),
         (2, now() - interval '2 year', now() - interval '18 month'),
         (3, now() - interval '3 year', now() - interval '1 year'),
         (4, date '2016-02-29',         date '2017-03-01'),
         (5, date '2016-02-29',         date '2017-02-28'),
         (6, date '2019-02-28',         date '2020-02-29'),
         (7, date '2016-02-01',         date '2017-02-01')

现在,根据您选择的“一年”定义,您可以有 2、3、4、6 种,或许还有其他组合满足您的选择标准。

例如,如果您选择使用interval '1 year',如下所示

select *
  from some_table t
  where t.cancel_date <= t.order_date + interval '1 year';

您会发现id 值为 1、2、5 和 7 的行被选中。

如果您用interval '364 day' 替换上面的间隔,那么只有id 为1 和2 的行会被选中。

使用interval '365 day' 的间隔选择第 1、2 和 5 行。

并且使用interval '366 day'(闰年,你知道:-) 的间隔选择第 1、2、4、5、6 和 7 行。

然后您可以将&lt;= 更改为&lt; 并进一步提高混乱度!

所以你有选择。明智地选择... :-)

db<>fiddle here

【讨论】:

    【解决方案2】:

    一年内取消的客户数量为:

    select count(*)
    from t
    where cancel_date <= order_date + interval '365 day';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-04
      • 2020-10-28
      • 2021-11-16
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多