问题
I'd like to configure the interval used by my query, but cannot figure out how to declare
DAY
, WEEK
, MONTH
, QUARTER
, YEAR
etc. as a variable.
DECLARE interval ???; -- What datatype is `DAY`, `MONTH` etc?
SET interval = MONTH;
If relevant, my query does something like this:
WITH dates AS (
SELECT * FROM UNNEST(
GENERATE_DATE_ARRAY(
DATE_TRUNC('2019-12-11', MONTH),
DATE_TRUNC('2020-02-19', MONTH),
INTERVAL 1 MONTH
)
) as date
)
SELECT * FROM dates;
And I'd like MONTH
to be switched out for WEEK
or DAY
for example.
回答1:
You cannot declare as variables, but this is the best trick I use:
DECLARE var_date_option STRING DEFAULT 'MONTH';
then use as
CASE var_date_option
WHEN 'DAY' THEN GENERATE_DATE_ARRAY(t.min_date,t.max_date, INTERVAL 1 DAY)
WHEN 'WEEK' THEN GENERATE_DATE_ARRAY(t.min_date,t.max_date, INTERVAL 1 WEEK)
WHEN 'MONTH' THEN GENERATE_DATE_ARRAY(t.min_date,t.max_date, INTERVAL 1 MONTH)
END
来源:https://stackoverflow.com/questions/60176167/how-do-you-declare-day-week-month-quarter-year-etc-as-a-variable