Snowflake中设置一周起始日为周一并获取日期字段的周起止日期
在Snowflake中设置周起始为周一并获取周起止日期
1. 设置一周起始日为周一
Snowflake通过WEEK_START参数控制周的起始日,其中1代表周一,0为默认的周日。你可根据需求设置会话级或账户级参数:
会话级设置(仅当前会话生效)
执行后,当前会话内所有周相关函数都会以周一作为周起始:
ALTER SESSION SET WEEK_START = 1;
账户级设置(全局生效,需权限)
若需所有会话默认使用周一作为周起始,需切换至ACCOUNTADMIN角色执行:
ALTER ACCOUNT SET WEEK_START = 1;
2. 获取指定日期对应的周起始(周一)和周结束(周日)
提供两种实现方式,一种依赖上述参数设置,另一种为不依赖参数的通用计算:
方式一:依赖WEEK_START参数
当WEEK_START=1时,直接用DATE_TRUNC获取周起始,再加6天得到周结束:
SELECT date_col AS 原日期, DATE_TRUNC('week', date_col) AS 周起始日期_周一, DATE_TRUNC('week', date_col) + INTERVAL '6 days' AS 周结束日期_周日 FROM your_table;
方式二:不依赖参数的通用计算
无需修改参数,通过日期偏移直接计算周一和周日:
SELECT date_col AS 原日期, -- 计算周一:减去当前日期的星期数(周日=1)再加2 date_col - DAYOFWEEK(date_col) + 2 AS 周起始日期_周一, -- 计算周日:基于周一日期加6天,或直接偏移计算 (date_col - DAYOFWEEK(date_col) + 2) + INTERVAL '6 days' AS 周结束日期_周日 FROM your_table;
注:Snowflake中
DAYOFWEEK函数返回值范围为1(周日)到7(周六),上述偏移计算基于此规则。
内容的提问来源于stack exchange,提问作者Kai
相关产品推荐
相关产品推荐

