【问题标题】:SQL difference between two datetime columns两个日期时间列之间的 SQL 差异
【发布时间】:2021-10-21 23:17:42
【问题描述】:

我有一个包含 2 列 datetime 数据类型的数据集,如下所示:

我想获取两个日期之间的差异,并使用以下代码进行尝试:

Select 
    *, 
    original_due_date - due_date as difference
from 
    Table

但是我不确定这是否足够,因为这是一个日期时间,而不仅仅是日期。

任何意见将不胜感激。

期望的输出

【问题讨论】:

  • Postgres 没有 datetime 数据类型。你的意思是timestamp?如果是这样,你想要什么结果?就在几天之内?作为间隔?在其他一些。单位?
  • 样本数据最好显示为formatted text。请参阅here,了解有关如何创建漂亮表格的一些提示。
  • timestamp 中减去timestamp 的结果是interval
  • 嗨@GordonLinoff,基本上我想取它们之间的差异并在几天内得出结果。 (例如 2021 年 4 月 21 日 - 2021 年 4 月 22 日 = 1 天)所以我需要差异列是天数。希望我说得通!
  • 07-01-2021 是指 1 月 7 日还是 7 月 1 日?

标签: sql date hive hiveql date-arithmetic


【解决方案1】:

该问题最初被标记为 Postgres,因此这回答了原始问题。

据推测,您将值存储为timestamps。如果您只想在几天内获得结果,请转换为dates 并获取差额:

Select t.*,
       (t.original_due_date::date - t.due_date::date) AS difference
from Table t;

如果你想要小数天,那么一个非常简单的方法是提取以秒为单位的“纪元”,然后使用算术:

Select t.*,
       ( extract(epoch from t.original_due_date - 
         extract(epoch from t.due_date
       ) / (24.0 * 60 * 60) AS decimal_days
from Table t;

【讨论】:

  • 抱歉,显然 hiveSQL 不允许使用“:”。我没有提到同样的事情。
【解决方案2】:

将时间戳转换为秒 (unix_timestamp),计算差异并除以 (60*60*24) 得到天数

select  (unix_timestamp(original_due_date, 'MM-dd-yyyy HH:mm')-unix_timestamp(due_date, 'MM-dd-yyyy HH:mm'))/(60*60*24) as difference_days
 from (select '07-01-2021 00:00' as due_date,  '02-10-2020 00:00' as original_due_date) t

结果:

-507

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 1970-01-01
    • 2023-03-24
    • 2023-03-23
    • 2011-10-29
    • 2014-10-12
    • 2021-11-25
    • 2011-08-01
    • 2013-08-28
    相关资源
    最近更新 更多