You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kusto week_of_year函数周数与年份匹配异常及解决方案咨询

Kusto中年份与周数拼接的匹配问题

问题复现

执行以下Kusto查询:

let dt = datetime(2023-01-01);
let weekOfYear = datetime_part("week_of_year", dt);
let year = datetime_part("year", dt);
print 
YearWeek = strcat(year, '-', weekOfYear)

返回结果:
YearWeek
2023-52

预期结果:
YearWeek
2023-01

问题原因:
datetime_part("week_of_year", ...)遵循ISO 8601标准——一周从周一开始,且一年的第一周需包含至少4天在当年。因此2023年1月1日(周日)会被归为2022年的第52周。但datetime_part("year", ...)仅返回日期本身的年份,两者拼接后就出现了年份与周数不匹配的混乱。

解决办法

根据需求选择以下两种方案:

方案1:遵循ISO 8601标准,获取正确的年周组合

使用iso_week_year函数获取该日期所属ISO周对应的年份,确保与周数匹配:

let dt = datetime(2023-01-01);
let weekNum = datetime_part("week_of_year", dt);
let isoYear = datetime_part("iso_week_year", dt);
print YearWeek = strcat(isoYear, '-', format_digit(weekNum, 2))

返回结果:2022-52(符合ISO标准的正确结果)

方案2:将1月1日所在周算作当年第1周

如果需要自定义周数规则,把每年1月1日所在周定为第1周,可以通过计算日期与当年第一天的天数差实现:

let dt = datetime(2023-01-01);
let firstDayOfYear = startofyear(dt);
let dayDiff = datetime_diff("day", dt, firstDayOfYear);
let weekNum = dayDiff / 7 + 1;
let year = datetime_part("year", dt);
print YearWeek = strcat(year, '-', format_digit(weekNum, 2))

返回结果:2023-01(符合预期)

内容的提问来源于stack exchange,提问作者Sahil Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:30:20