如何在bigquery中获得浮动或十进制的两个日期时间之间的小时差
Posted
技术标签:
【中文标题】如何在bigquery中获得浮动或十进制的两个日期时间之间的小时差【英文标题】:How to get difference in hours between two datetime in floating or decimal in bigquery 【发布时间】:2020-07-17 12:29:30 【问题描述】:我在以十进制计算两个日期之间的差异时遇到问题。
Date1:- 2019-07-02 16:42:06
Date2:- 2019-07-02 15:53:01
预期结果:- 0:49:05
select datetime_diff('2019-07-02 16:42:06','2019-07-02 15:53:01',Hour)
BigQuery 输出:-1
【问题讨论】:
【参考方案1】:如果你想要一个十进制值,那么使用更小的单位和算术:
select datetime_diff('2019-07-02 16:42:06', '2019-07-02 15:53:01', second) / (60 * 60.0) as decimal_hours
您的样本结果不是十进制值。
【讨论】:
实际上我需要 0 或 0:49。商定的预期输出不是十进制的,它的时间。此外,这只是示例,并在此输出上应用了进一步的计算。【参考方案2】:预期结果:- 0:49:05
以下是 BigQuery 标准 SQL
SELECT FORMAT('%i%s',
DIV(DATETIME_DIFF(date1, date2, MINUTE), 60),
FORMAT_TIME(':%M:%S', TIME(DATETIME_ADD(DATETIME(TIMESTAMP(DATE(1970, 1, 1))), INTERVAL DATETIME_DIFF(date1, date2, SECOND) SECOND)))
) AS diff
对于 DATETIME '2019-07-05 17:42:06' date1,DATETIME '2019-07-02 15:53:01' date2 它给出
diff
73:49:05
对于 DATETIME '2019-07-02 17:42:06' date1,DATETIME '2019-07-02 15:53:01' date2 结果为
diff
1:49:05
对于 DATETIME '2019-07-02 16:42:06' date1,DATETIME '2019-07-02 15:53:01' date2(如您的问题)结果是
diff
0:49:05
如果您知道差异将在 24 小时内,您可以使用以下更简单的语句
FORMAT_TIME('%T', TIME(DATETIME_ADD(DATETIME(TIMESTAMP(DATE(1970, 1, 1))), INTERVAL DATETIME_DIFF(date1, date2, SECOND) SECOND)))
对于最后两个示例,结果将分别为01:49:05
和00:49:05
【讨论】:
以上是关于如何在bigquery中获得浮动或十进制的两个日期时间之间的小时差的主要内容,如果未能解决你的问题,请参考以下文章
如何在php/codeigniter或mysql中获得两个相差20分钟的日期的所有组合
如何在标准 SQL 的 BigQuery 中过滤具有 iso 周值的列?