首页 > 解决方案 > 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,对应于 12 月 1 日 05: 59:59 @UTC

我需要如上所示获取开始和结束时间@UTC,这将用于提取数据。非常感谢一些帮助。

标签: sqlgoogle-bigquery

解决方案


以下是 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()).*

推荐阅读