Snowflake SQL如何将'YYYY WW'格式字符串转为对应周周一的日期
Snowflake SQL:将'YYYY WW'格式字符串转为当周周一日期
方法1:针对ISO周(周一为一周起始)
Snowflake支持直接解析ISO周格式的字符串,使用TO_DATE函数并指定格式符IYYY IW,会直接返回对应ISO周的周一日期:
SELECT TO_DATE(your_column_name, 'IYYY IW') AS week_monday FROM your_table;
例如:TO_DATE('2023 W37', 'IYYY IW')会返回2023-09-11(2023年第37个ISO周的周一)。
方法2:针对美式周(周日为一周起始)
如果你的周定义以周日为起始,先通过TO_DATE('YYYY WW')解析出该周的周日,再调整到周一:
方式A:用DATEADD调整天数
SELECT DATEADD(DAY, -6, TO_DATE(your_column_name, 'YYYY WW')) AS week_monday FROM your_table;
方式B:用DATE_TRUNC指定周起始
使用DATE_TRUNC的第三个参数指定周起始为周一(参数值1代表周一):
SELECT DATE_TRUNC('WEEK', TO_DATE(your_column_name, 'YYYY WW'), 1) AS week_monday FROM your_table;
不推荐用substring的原因
手动拆分年份和周数后,需要自行处理周与日期的映射逻辑(比如跨年周、不同周定义的差异),容易出现计算错误,而内置日期函数已经封装了这些复杂逻辑,更准确可靠。
内容的提问来源于stack exchange,提问作者Michelle
相关产品推荐
相关产品推荐

