簡體   English   中英

Bigquery 時間作為持續時間,轉換為秒

[英]Bigquery Time as duration, convert to second

我對字符串的時間有疑問

總的來說,我的目標是從包含 HH:MM:SS 的持續時間 AS 字符串中獲取多少秒

00:01:00 -> 60
00:02:30 -> 150
01:00:00 -> 3600

我的查詢是這樣的

TIME_DIFF(CAST(duration AS TIME), '00:00:00', SECOND)

但是,上面的查詢不適用於超過 24:00:00 的持續時間是否有任何不同的解決方案可以得到

我假設持續時間列是表示時間的字符串,格式如下HHHH:MM:SS其中 HHHH 可以是小時的任何值,甚至超過 24。如果是這種情況 - 請考慮以下解決方案

select duration, 
  3600 * cast(regexp_extract(duration, r'^\d*') as int64) +
  time_diff(cast(regexp_replace(duration, r'^\d*', '00') as time), '00:00:00', second) as seconds
from `project.dataset.table`   

以下是 output 的示例

在此處輸入圖像描述

如果您想拆分超過 24 小時的“時間”值,那么我必須假設您的源數據是字符串而不是time 在 BigQuery 中,時間值必須小於 24 小時。

所以,使用字符串操作:

select (cast(split(hhmmss, ':')[ordinal(1)] as int64) * 60 * 60 +
        cast(split(hhmmss, ':')[ordinal(2)] as int64) * 60 +
        cast(split(hhmmss, ':')[ordinal(3)] as int64)
       ) as seconds
from (select '00:01:00' as hhmmss union all 
      select '00:02:30' union all 
      select '01:00:00') x

您可以嘗試另一種解析 TIMESTAMP DATA 的方法:-

WITH DATA AS(
SELECT '2019-05-03T00:01:00' AS F_DATE 
UNION ALL
SELECT '2019-05-03T00:02:30'
UNION ALL
SELECT '2019-05-03T01:00:30'
)
select F_DATE, EXTRACT(HOUR FROM CAST( F_DATE AS TIMESTAMP))  * 60 *60 + EXTRACT(MINUTE FROM CAST(F_DATE AS TIMESTAMP)) * 60 + EXTRACT(SECOND FROM CAST(F_DATE AS TIMESTAMP)) AS DATE_SEC FROM DATA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM