我是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
谢谢
答案 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;