简体   繁体   English

如何使用脚本生成 INTERVAL 1<day|week|month> ?</day|week|month>

[英]How to generate with scripting INTERVAL 1 <day|week|month>?

We are trying to find a syntax to generate the DAY|WEEK|MONTH options from the 3rd param of date functions.我们正试图找到一种语法来从日期函数的第三个参数生成 DAY|WEEK|MONTH 选项。

DECLARE var_date_option STRING DEFAULT 'DAY';
select GENERATE_DATE_ARRAY('2019-01-01','2020-01-01',INTERVAL 1 WEEK)
                                            dynamic param here -^^^

Do you know what's the proper syntax to use in DECLARE and that should be converted to valid SQL.您知道在 DECLARE 中使用的正确语法是什么并且应该将其转换为有效的 SQL 吗?

Below is for BigQuery Standard SQL以下是 BigQuery 标准 SQL

Those DAY|WEEK|MONTH are LITERALs and cannot be parametrized那些DAY|WEEK|MONTH是 LITERALs 并且不能被参数化
And, as you know - dynamic SQL is also not available yet而且,如您所知 - 动态 SQL 也尚不可用

So, unfortunately below is the only solution I can think of as of today所以,不幸的是,下面是我今天能想到的唯一解决方案

#standardSQL
DECLARE var_date_option STRING DEFAULT 'DAY';
DECLARE start_date, end_date DATE;
DECLARE date_array ARRAY<DATE>;

SET (start_date, end_date, var_date_option) = ('2019-01-01','2020-01-01', 'MONTH');

SET date_array = (
  SELECT CASE var_date_option 
    WHEN 'DAY' THEN GENERATE_DATE_ARRAY(start_date, end_date, INTERVAL 1 DAY)
    WHEN 'WEEK' THEN GENERATE_DATE_ARRAY(start_date, end_date, INTERVAL 1 WEEK)
    WHEN 'MONTH' THEN GENERATE_DATE_ARRAY(start_date, end_date, INTERVAL 1 MONTH)
  END
);

SELECT * FROM UNNEST(date_array) AS date_dt;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM