如何在bigquery中获得两个floating或decimal的datetime之间的小时差

6vl6ewon  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(320)

我在计算小数点后两个日期的差值时遇到了问题。

Date1:- 2019-07-02 16:42:06
Date2:- 2019-07-02 15:53:01

预期result:- 0:49:05

select datetime_diff('2019-07-02 16:42:06','2019-07-02 15:53:01',Hour)

大查询output:-1

mbzjlibv

mbzjlibv1#

预期result:- 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

对于日期时间“2019-07-02 17:42:06”日期1,日期时间“2019-07-02 15:53:01”日期2结果为

diff     
1:49:05

对于日期时间“2019-07-02 16:42:06”日期1,日期时间“2019-07-02 15:53:01”日期2(如您的问题所示),结果为

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

4xy9mtcn

4xy9mtcn2#

如果需要十进制值,则使用较小的单位和算术:

select datetime_diff('2019-07-02 16:42:06', '2019-07-02 15:53:01', second) / (60 * 60.0) as decimal_hours

您的示例结果不是十进制值。

相关问题