如何比较TIMESTAMP列中的时间与String格式列中的时间(hH:MM:SS)

时间:2018-10-08 20:46:07

标签: sql google-bigquery

我是BigQuery SQL(Oracle后台)的新手,我正在努力比较表1中的时间(以TIMESTAMP格式),该时间位于以字符串格式存储在表2中的开始时间和结束时间之间。

我可以使用哪些TIMESTAMP,EXTRACT或format函数中的哪些来编写sql来识别表1中介于表2的开始时间和结束时间之间的结束时间?

表1

{
     "query":{
          "bool":{
               "must":{
                    "range":{
                        "date":{
                             "gte":"now-1d/d",
                             "lt" :"now/d"
                               }
                             },
                    "match":{
                         "KEY":"VALUE"
                          }
                 }
           }
     }
 }

表2

Row starttime           endtime  
1   2018-07-20 06:45:00 UTC null     
2   2018-07-20 06:45:00 UTC 2018-07-20 08:58:08 UTC

谢谢

2 个答案:

答案 0 :(得分:1)

以下是BigQuery标准SQL

   
#standardSQL
SELECT t1.starttime, t1.endtime
FROM `project.dataset.table1` t1
JOIN `project.dataset.table2` t2
ON TIME(t1.endtime) BETWEEN PARSE_TIME('%T', t2.starttime) AND PARSE_TIME('%T', t2.endtime)

您可以使用问题中的虚拟数据进行上述测试和操作:

#standardSQL
WITH `project.dataset.table1` AS (
  SELECT 1 id, TIMESTAMP '2018-07-20 06:45:00 UTC' starttime, TIMESTAMP '2018-07-20 06:48:08 UTC' endtime UNION ALL
  SELECT 2, '2018-07-20 06:45:00 UTC', '2018-07-20 08:58:08 UTC'
), `project.dataset.table2` AS (
  SELECT 1 id, '06:45:00' starttime, '06:50:00' endtime UNION ALL 
  SELECT 2, '14:45:00', '14:50:00' 
)
SELECT t1.starttime, t1.endtime
FROM `project.dataset.table1` t1
JOIN `project.dataset.table2` t2
ON TIME(t1.endtime) BETWEEN PARSE_TIME('%T', t2.starttime) AND PARSE_TIME('%T', t2.endtime)

答案 1 :(得分:0)

您可以作为字符串进行比较:

select t1.*, t2.*
from table1 t1 join
     table2 t2
     on format_timestamp('%H:%M:%S', t1.endtime) between t2.starttime and t2.endtime;