К сожалению, Snowflake изначально не поддерживает эту функцию.
Хотя можно вручную вычислить дату по неделе и году ISO, она очень сложная.Поэтому, как и другие предлагали, создать таблицу измерения даты для этого гораздо проще.
Пример запроса, который может сгенерировать его для поиска (обратите внимание - это не полная таблица измерения даты - обычно это одна строкав день, это одна строка в неделю).
create or replace table iso_week_lookup as
select
date_part(yearofweek_iso, d) year_iso,
date_part(week_iso, d) week_iso,
min(d) first_day
from (
select dateadd(day, row_number() over (order by 1) - 1, '2000-01-03'::date) AS d
from table(generator(rowCount=>10000))
)
group by 1, 2 order by 1,2;
select * from iso_week_lookup limit 2;
----------+----------+------------+
YEAR_ISO | WEEK_ISO | FIRST_DAY |
----------+----------+------------+
2000 | 1 | 2000-01-03 |
2000 | 2 | 2000-01-10 |
----------+----------+------------+
select min(first_day), max(first_day) from iso_week_lookup;
----------------+----------------+
MIN(FIRST_DAY) | MAX(FIRST_DAY) |
----------------+----------------+
2000-01-03 | 2027-05-17 |
----------------+----------------+
select * from iso_week_lookup where year_iso = 2019 and week_iso = 10;
----------+----------+------------+
YEAR_ISO | WEEK_ISO | FIRST_DAY |
----------+----------+------------+
2019 | 10 | 2019-03-04 |
----------+----------+------------+
Обратите внимание, что вы можете поиграть с константами в create table
, чтобы создать таблицу нужного диапазона.Просто не забудьте использовать понедельник в качестве начального дня, иначе вы получите неправильное значение для первой недели в таблице:)