在Google BigQuery中,您可以使用内置的日期和时间函数来找到一个历年的ISO周号的第一个日期和最后一个日期。以下是一些相关的函数和示例查询:
要找到特定年份的ISO周号的第一个日期,您可以使用DATE_TRUNC
函数结合%W
格式化选项。例如,要找到2023年第1周的第一个日期,您可以执行以下查询:
SELECT DATE_TRUNC(DATE '2023-01-01', WEEK) AS first_day_of_week_1_2023;
这将返回2023-01-02
,这是2023年第1周的第一个日期(注意,ISO周通常从周一开始)。
要找到特定年份的ISO周号的最后一个日期,您可以使用DATE_ADD
函数结合%W
格式化选项。例如,要找到2023年第1周的最后一个日期,您可以执行以下查询:
SELECT DATE_ADD(DATE_TRUNC(DATE '2023-01-01', WEEK), INTERVAL 6 DAY) AS last_day_of_week_1_2023;
这将返回2023-01-08
,这是2023年第1周的最后一个日期。
如果您想要找到一年中所有ISO周的第一个和最后一个日期,您可以使用一个循环来遍历所有的周。以下是一个示例查询,它使用递归公用表表达式(CTE)来生成一年中每一周的第一个和最后一个日期:
WITH RECURSIVE Weeks AS (
SELECT 1 AS week_number, DATE_TRUNC(DATE '2023-01-01', WEEK) AS start_date
UNION ALL
SELECT week_number + 1, DATE_ADD(start_date, INTERVAL 7 DAY)
FROM Weeks
WHERE week_number < 53 -- ISO 8601标准中一年最多有53周
)
SELECT week_number,
start_date AS first_day_of_week,
DATE_ADD(start_date, INTERVAL 6 DAY) AS last_day_of_week
FROM Weeks
WHERE EXTRACT(YEAR FROM start_date) = 2023;
这个查询将生成一个包含2023年每一周的第一个和最后一个日期的结果集。
领取专属 10元无门槛券
手把手带您无忧上云