Presto如何找到给定一周的开始日期
Presto how to find start date given week
我想从给定的 ISO 周 开始日期(范围可以从 1-53、星期一 作为开始日期)和使用 Presto SQL 查询的年份。
即年 - 2020 和周 - 2 应该 return 06/01/2020
有内置函数吗?
Table结构:
select year, week from table1; // returns year and week from table table 1
使用DATE_ADD和MAKEDATE你可以得到结果...
select DATE_ADD(MAKEDATE(year, 1), INTERVAL (week-1) WEEK) as start_date from <table_name>;
没有直接的方法从年 + 周构造日期(这有一个问题:https://github.com/trinodb/trino/issues/2287), but you can achieve what you want with the date_parse
函数。
例如:
WITH data (year, week) AS (VALUES (2020, 2))
SELECT CAST(date_parse(CAST(year AS varchar) || ':' || CAST(week AS varchar), '%x:%v') AS date)
FROM data
产生:
_col0
------------
2020-01-06
(1 row)
Martin 的答案就快有了。您应该使用 year_of_week
而不是 year
。尽管进行了此更改,但您必须确保不会出现流血到下一年或上一年的几周的错误,即上一年的最后几天或下一年的第一天。
year_of_week
returns ISO 周的年份。
这是一个例子:
WITH data (year, week) AS (VALUES (2020, 2))
SELECT CAST(date_parse(CAST(year_of_week AS varchar) || ':' || CAST(week AS varchar), '%x:%v') AS date)
FROM data
参考文献:
我认为对于部分周(当新年的第一天仍算作第 53 周时)这不起作用:
Query failed (#20210624_142222_02859_zf75v): Cannot parse "2021:53": Value 53 for weekOfWeekyear must be in the range [1,52]
通过这个公式测试:
日期是 2021 年 1 月 2 日,仍被视为第 53 周,但在 2021 年...
CAST(date_parse(CAST(year(date(service_order_creation_date)) AS varchar) || ':' || CAST(week(date(service_order_creation_date)) AS varchar), '%x:%v') AS date)
我想从给定的 ISO 周 开始日期(范围可以从 1-53、星期一 作为开始日期)和使用 Presto SQL 查询的年份。
即年 - 2020 和周 - 2 应该 return 06/01/2020
有内置函数吗?
Table结构:
select year, week from table1; // returns year and week from table table 1
使用DATE_ADD和MAKEDATE你可以得到结果...
select DATE_ADD(MAKEDATE(year, 1), INTERVAL (week-1) WEEK) as start_date from <table_name>;
没有直接的方法从年 + 周构造日期(这有一个问题:https://github.com/trinodb/trino/issues/2287), but you can achieve what you want with the date_parse
函数。
例如:
WITH data (year, week) AS (VALUES (2020, 2))
SELECT CAST(date_parse(CAST(year AS varchar) || ':' || CAST(week AS varchar), '%x:%v') AS date)
FROM data
产生:
_col0
------------
2020-01-06
(1 row)
Martin 的答案就快有了。您应该使用 year_of_week
而不是 year
。尽管进行了此更改,但您必须确保不会出现流血到下一年或上一年的几周的错误,即上一年的最后几天或下一年的第一天。
year_of_week
returns ISO 周的年份。
这是一个例子:
WITH data (year, week) AS (VALUES (2020, 2))
SELECT CAST(date_parse(CAST(year_of_week AS varchar) || ':' || CAST(week AS varchar), '%x:%v') AS date)
FROM data
参考文献:
我认为对于部分周(当新年的第一天仍算作第 53 周时)这不起作用:
Query failed (#20210624_142222_02859_zf75v): Cannot parse "2021:53": Value 53 for weekOfWeekyear must be in the range [1,52]
通过这个公式测试:
日期是 2021 年 1 月 2 日,仍被视为第 53 周,但在 2021 年...
CAST(date_parse(CAST(year(date(service_order_creation_date)) AS varchar) || ':' || CAST(week(date(service_order_creation_date)) AS varchar), '%x:%v') AS date)