Sql Google Bigquery,获取特定时区的一周开始和结束时间

Sql Google Bigquery,获取特定时区的一周开始和结束时间,sql,google-bigquery,Sql,Google Bigquery,假设一周从周日上午(00:00:00)开始,到周六晚上(23:59:59)结束。 给定一个特定的时区(例如:“CST6CDT”),我想获得在该时区开始和结束的相应UTC时间 例如: 对于本周和时区“CST6CDT” 本周开始@CST6CDT=11月24日,00:00:00对应于11月24日,06:00:00@UTC 本周结束时@CST6CDT=11月30日23:59:59,对应于UTC 12月1日05:59:59 我需要获得如上所示UTC的开始和结束时间,用于提取数据。我真的很感激你能帮我 下面

假设一周从周日上午(00:00:00)开始,到周六晚上(23:59:59)结束。 给定一个特定的时区(例如:“CST6CDT”),我想获得在该时区开始和结束的相应UTC时间

例如: 对于本周和时区“CST6CDT”

本周开始@CST6CDT=11月24日,00:00:00对应于11月24日,06:00:00@UTC 本周结束时@CST6CDT=11月30日23:59:59,对应于UTC 12月1日05:59:59


我需要获得如上所示UTC的开始和结束时间,用于提取数据。我真的很感激你能帮我

下面是BigQuery标准SQL

#standardSQL
SELECT 
  TIMESTAMP(DATE_TRUNC(CURRENT_DATE(), WEEK), 'CST6CDT') AS start_week, 
  TIMESTAMP_SUB(TIMESTAMP(DATE_ADD(DATE_TRUNC(CURRENT_DATE(), WEEK), INTERVAL 1 WEEK), 'CST6CDT'), INTERVAL 1 SECOND) AS end_week   
结果

Row start_week              end_week     
1   2019-11-24 06:00:00 UTC 2019-12-01 05:59:59 UTC    
显然,您可以像下面的例子一样重构上面的代码以便于重用,所以您可以将任何感兴趣的日期传递到UDF中

#standardSQL
CREATE TEMP FUNCTION week_boundary(day DATE) AS (
  STRUCT(
  TIMESTAMP(DATE_TRUNC(day, WEEK), 'CST6CDT') AS start_week, 
  TIMESTAMP_SUB(TIMESTAMP(DATE_ADD(DATE_TRUNC(day, WEEK), INTERVAL 1 WEEK), 'CST6CDT'), INTERVAL 1 SECOND) AS end_week
  )
);
SELECT week_boundary(CURRENT_DATE()).*

下面是BigQuery标准SQL

#standardSQL
SELECT 
  TIMESTAMP(DATE_TRUNC(CURRENT_DATE(), WEEK), 'CST6CDT') AS start_week, 
  TIMESTAMP_SUB(TIMESTAMP(DATE_ADD(DATE_TRUNC(CURRENT_DATE(), WEEK), INTERVAL 1 WEEK), 'CST6CDT'), INTERVAL 1 SECOND) AS end_week   
结果

Row start_week              end_week     
1   2019-11-24 06:00:00 UTC 2019-12-01 05:59:59 UTC    
显然,您可以像下面的例子一样重构上面的代码以便于重用,所以您可以将任何感兴趣的日期传递到UDF中

#standardSQL
CREATE TEMP FUNCTION week_boundary(day DATE) AS (
  STRUCT(
  TIMESTAMP(DATE_TRUNC(day, WEEK), 'CST6CDT') AS start_week, 
  TIMESTAMP_SUB(TIMESTAMP(DATE_ADD(DATE_TRUNC(day, WEEK), INTERVAL 1 WEEK), 'CST6CDT'), INTERVAL 1 SECOND) AS end_week
  )
);
SELECT week_boundary(CURRENT_DATE()).*

谢谢你,米哈伊尔!这正是我一直在努力实现的目标。不要认为我现在就需要UDF,因为唯一的输入是时区,日期将始终是当前的一天。根据计算的开始和结束日期,我必须提取数据,所以我总是查看特定时区的数据。这太完美了!当然,当你有足够的声誉时,再来投票支持答案:o)哈哈。行!谢谢你,米哈伊尔!这正是我一直在努力实现的目标。不要认为我现在就需要UDF,因为唯一的输入是时区,日期将始终是当前的一天。根据计算的开始和结束日期,我必须提取数据,所以我总是查看特定时区的数据。这太完美了!当然,当你有足够的声誉时,再来投票支持答案:o)哈哈。行!