如何在SQL/Impala中计算两个TIMESTAMP的分钟时间差
解决SQL/Impala中计算两个时间戳分钟差的问题
哎,你遇到的问题其实很简单——你给列名加单引号啦!在SQL里,单引号是用来定义字符串常量的,所以你写的UNIX_TIMESTAMP('end date')本质上是在尝试把字符串"end date"转换成时间戳,而不是读取你表中end date列的实际值,这自然得不到正确结果。
给你两种靠谱的解决方法:
方法一:修正UNIX_TIMESTAMP的写法
既然你已经用到了UNIX_TIMESTAMP,那只要把列名的单引号换成反引号(因为你的列名包含空格,必须用反引号或双引号包裹才能让SQL正确识别),再把秒数差值除以60转换成分钟数就行:
SELECT (UNIX_TIMESTAMP(`end date`) - UNIX_TIMESTAMP(`start date`)) / 60 AS mindiff FROM your_table_name;
(记得把your_table_name换成你实际的表名哦)
方法二:用Impala自带的TIMESTAMPDIFF函数(更直观)
Impala提供了专门计算时间差的函数TIMESTAMPDIFF,直接指定单位就能得到结果,不用手动转秒再换算,非常省心:
SELECT TIMESTAMPDIFF(MINUTE, `start date`, `end date`) AS mindiff FROM your_table_name;
这个函数的参数顺序是:第一个是时间单位(这里填MINUTE表示分钟),第二个是起始时间列,第三个是结束时间列,直接返回两者的分钟差值。
内容的提问来源于stack exchange,提问作者Xyltic
相关产品推荐
相关产品推荐

