【问题标题】:Impala SQL - How to count Months between timestamps?Impala SQL - 如何计算时间戳之间的月份?
【发布时间】:2015-05-06 20:25:55
【问题描述】:

使用 Impala SQL,有没有一种简洁的方法来计算两个时间戳之间的月数?

datediff 函数仅返回两个时间戳之间的天数,但我希望有一种优雅的方法可以在 # 个月数上执行相同的计算。

【问题讨论】:

    标签: impala


    【解决方案1】:

    不幸的是,even in full-featured programming languages like Python 这个问题很少有优雅的答案。答案取决于你如何定义# of months between two timestamps

    如果我要使用 Impala 内置函数来解决这个问题,我会首先对时间戳列进行排序,然后使用 TO_DATE(ts) 将时间戳转换为日期字符串,然后使用 YEAR(date)MONTH(date)DAY(date) 将组件从日期字符串中提取出来,最后使用类似于https://stackoverflow.com/a/4040338/171965 的公式,修改为同样比较天数,如果后面日期的天数小于则减去一个月较早日期的天数。

    【讨论】:

      【解决方案2】:

      MONTHS_BETWEEN(TIMESTAMP newer, TIMESTAMP older)

      目的:返回两个 TIMESTAMP 值的日期部分之间的月数。除了日期之间的完整月份外,还可以包含一个小数部分,表示额外的天数。小数部分的计算方法是将天数之差除以 31(与月份无关)。

      返回类型:DOUBLE

      添加于:CDH 5.5.0 / Impala 2.3.0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多