Sql 如何在bigquery中获得浮点或十进制两个datetime之间的小时差
我在用十进制计算两个日期之间的差值时遇到了一个问题Sql 如何在bigquery中获得浮点或十进制两个datetime之间的小时差,sql,google-bigquery,Sql,Google Bigquery,我在用十进制计算两个日期之间的差值时遇到了一个问题 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如果需要十进制值,则使用较小的单位和算术: select datetime_diff('2019-07-02 16:42:06', '2
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如果需要十进制值,则使用较小的单位和算术:
select datetime_diff('2019-07-02 16:42:06', '2019-07-02 15:53:01', second) / (60 * 60.0) as decimal_hours
您的示例结果不是十进制值
预期结果:-0:49:05
select datetime_diff('2019-07-02 16:42:06','2019-07-02 15:53:01',Hour)
下面是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
对于日期时间“2019-07-05 17:42:06”日期1,日期时间“2019-07-02 15:53:01”日期2
diff
73:49:05
对于日期时间“2019-07-02 17:42:06”日期1,日期时间“2019-07-02 15:53:01”日期2结果为
diff
1:49:05
diff
0:49:05
对于日期时间“2019-07-02 16:42:06”日期1,日期时间“2019-07-02 15:53:01”日期2(如您的问题所示),结果为
diff
1:49:05
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
,实际上我需要0或0:49。约定的预期输出不是小数,而是时间。此外,这只是样本,并对该输出应用进一步的计算。