如何在Big Query中获取以周一为起始的一周第一天?
BigQuery 获取一周的第一天(周一)
方法一:使用 DATE_TRUNC 函数(推荐)
BigQuery 的 DATE_TRUNC 函数支持指定每周的起始日,可直接将日期截断到所在周的周一:
-- 单个日期示例 SELECT DATE_TRUNC(DATE '2022-08-26', WEEK(MONDAY)) AS week_start; -- 输出:2022-08-22
如果处理表中的日期列,写法如下:
SELECT date_column, DATE_TRUNC(date_column, WEEK(MONDAY)) AS week_start FROM your_table;
说明:WEEK(MONDAY) 参数明确指定周一为每周的第一天,函数会自动将输入日期映射到对应周的周一,无需手动计算偏移量,逻辑清晰且不易出错。
方法二:使用 DATE_SUB 结合 EXTRACT 计算偏移
通过提取日期的星期数,计算与周一的天数差,再用 DATE_SUB 减去偏移量:
SELECT DATE_SUB(DATE '2022-08-26', INTERVAL (EXTRACT(DAYOFWEEK FROM DATE '2022-08-26') - 2) DAY) AS week_start; -- 输出:2022-08-22
说明:BigQuery 中 EXTRACT(DAYOFWEEK) 返回值范围是 1(周日)到 7(周六),因此用 DAYOFWEEK - 2 得到当前日期与周一的天数差,再通过 DATE_SUB 回退到周一。注意:此方法中周日会被映射到下周一,如果需要将周日归到上一周的周一,建议使用方法一。
内容的提问来源于stack exchange,提问作者user19212632
相关产品推荐
相关产品推荐

