Databricks中PySpark SQL如何从Year_week年周列提取对应月份
Databricks SQL 年周字段转两位月份实现方法
你的Year_week是4位年份+2位周数的标准年周编码,不需要手动维护周月映射表,直接用Databricks内置日期函数就能准确计算,还能自动处理跨月周、跨年周的边界情况。
根据你给出的样例规则(周归属以当周最后一天所在自然月为准),可直接运行以下SQL:
SELECT Year_week, -- 解析年周为当周周一,加6天得到当周周日,提取月份后补前导零为两位格式 lpad(month(date_add(to_date(cast(Year_week as string), 'yyyyww'), 6)), 2, '0') AS Month FROM 你的目标表名
如果你的
Year_week字段本身就是字符串类型,可以去掉cast(Year_week as string)这段转换。
样例运行结果
和你给出的预期输出完全一致:
| Year_week | Month |
|---|---|
| 202001 | 01 |
| 202002 | 01 |
| 202003 | 01 |
| 202004 | 01 |
| 202005 | 02 |
| 202006 | 02 |
| 202007 | 02 |
补充说明
- 代码里
'yyyyww'解析模式遵循ISO 8601周规则:每周起始为周一,每年第一周为包含1月4日的周,是国内业务统计最常用的周规则。 - 如果你的业务规则是按每周第一天(周一)所在自然月算归属,去掉
date_add(...,6)逻辑,直接取to_date解析结果的月份即可。 - 如果你的业务采用周日为每周起始的美式周规则,把解析格式替换为
'yyyyuu'即可。 - 如果不需要带前导零的字符串格式月份,去掉外层
lpad函数,直接返回month()的数值结果即可。
内容的提问来源于stack exchange,提问作者Jha Ayush
相关产品推荐
相关产品推荐

