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,对应于 12 月 1 日 05: 59:59 @UTC
我需要如上所示获取开始和结束时间@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()).*
推荐阅读
- java - JSON Schema2Pojo Gradle
- excel - Excel 2010 - 根据下拉值将数据复制到指定的工作表。
- facebook-graph-api - Facebook Graph API - 根据日期范围获取广告花费
- dynamics-crm - 动态 crm 机会“实际价值”
- c# - 如何检查属性是否为 IList,如果是,则分配一个新的空值
- python - 以字符串形式获取 aiohttp 结果
- android - 未找到 AndroidX MultiDex
- mysql - 使用连接表 Mysql 按同一列排序
- php - 使用 Joomla 模型调用 Comprofiler 插件
- c++ - 结束(过去)迭代器的 STL 迭代器重新验证?