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
相关产品推荐
相关产品推荐

