【问题标题】:How to create date based on year, week number and day in bigquery如何在bigquery中根据年、周数和日期创建日期
【发布时间】:2019-09-18 21:19:44
【问题描述】:

如何在 Bigquery 查询中根据年份、周数和日期值形成日期。

例如-年=2019,周数=37天=星期三。

输出: (2019-09-18)

年 =2019,周数 =36 天 = 星期二。

输出: (2019-09-10)

这里的月份将从周开始计算,日期将基于给定日期在该周的时间。

注意:Bigquery 从 0 开始一周,因此如果检查上述值以在另一个系统中进行比较,则可能是 38 和 37

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    不应该是week-1这样吗:

    WITH tbl AS (
      SELECT 2020 year, 21 week, 'Friday' day
    )
    SELECT *, 
      (
        SELECT DATE_ADD(DATE_ADD(DATE(year, 1, 1), INTERVAL week-1 WEEK), INTERVAL hit DAY)         
        FROM UNNEST(GENERATE_ARRAY(0, 6)) hit
        WHERE FORMAT_DATE('%A', DATE_ADD(DATE_ADD(DATE(year, 1, 1), INTERVAL week-1 WEEK), INTERVAL hit DAY)) = day
      ) AS result
    FROM tbl
    

    否则返回下周的日期

    【讨论】:

    • 是的,你说得对,我用的时候,按照你说的做了。
    【解决方案2】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    WITH `project.dataset.table` AS (
      SELECT 2019 year, 37 week, 'Wednesday' day UNION ALL
      SELECT 2019, 36, 'Tuesday' 
    )
    SELECT *, 
      (
        SELECT DATE_ADD(DATE_ADD(DATE(year, 1, 1), INTERVAL week WEEK), INTERVAL hit DAY)         
        FROM UNNEST(GENERATE_ARRAY(0, 6)) hit
        WHERE FORMAT_DATE('%A', DATE_ADD(DATE_ADD(DATE(year, 1, 1), INTERVAL week WEEK), INTERVAL hit DAY)) = day
      ) AS result
    FROM `project.dataset.table`  
    

    结果为

    Row year    week    day         result   
    1   2019    37      Wednesday   2019-09-18   
    2   2019    36      Tuesday     2019-09-10   
    

    【讨论】:

    • .- 你永远是我的救星,抱歉回复晚了。一个简单的问题,如果我们保持这个在性能方面有什么好处?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多