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

标签 sql google-bigquery

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

最佳答案

以下适用于 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;

关于sql - 如何使用脚本生成 INTERVAL 1 <day|week|month>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59071500/

相关文章:

Sql Server 2005 将列名称放在方括号中

SQL Server : how do I get data from a history table?

java - 如何将进程中的Json对象放入Google数据流中的Bigquery表中

google-bigquery - 谷歌大查询限制子句返回太多行

google-bigquery - bigquery 备份所有 View 定义

java - 如何在带有 bean 的 jdbc 准备语句中使用 INSERT INTO ALL 语句

sql - 使用一个 SQL 查询的结果来查找另一表的结果?

google-cloud-platform - 用于插入特定 BigQuery 数据集的 IAM 自定义角色

mysql - 更改 SQL 表中的日期格式

google-bigquery - BigQuery 中记录类型与展平表的查询性能