小编典典

如何使用脚本INTERVAL 1生成 ?

sql

我们正在尝试找到一种语法,以从日期函数的第三个参数生成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 -^^^

您知道在DECLARE中使用什么正确的语法,并且应该将其转换为有效的SQL。


阅读 157

收藏
2021-04-14

共1个答案

小编典典

以下是BigQuery标准SQL

这些DAY|WEEK|MONTH都是文字,无法进行参数化
而且,您知道-动态SQL尚不可用

因此,不幸的是,以下是我今天能想到的唯一解决方案

#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;
2021-04-14