Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在bigquery中获得浮点或十进制两个datetime之间的小时差_Sql_Google Bigquery - Fatal编程技术网

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。约定的预期输出不是小数,而是时间。此外,这只是样本,并对该输出应用进一步的计算。