Kusto从字符串提取日期:todatetime转换失败原因及月初获取方法
问题原因
第一个查询执行失败的核心原因是字符串替换后的结果不符合todatetime的可解析格式:
你执行replace_string(x,","," 01")时,原字符串"July, 2021"里逗号后自带一个空格,替换逗号为" 01"后得到的实际字符串是"July 01 2021",01和2021之间存在两个连续空格,todatetime对这类非标准的自然语言日期格式解析时要求严格的空格匹配,因此无法识别。
而第二个查询里你直接写的"July 01 2021"是单空格分隔的标准可解析格式,所以可以正常运行。
正确获取当月1号的实现方案
有两种常用的稳定实现方式:
方案1:调整替换规则,直接匹配逗号加空格
let x = "July, 2021"; // 直接替换", "(逗号+空格)为" 01 ",避免出现多空格 let calculatedTime = replace_string(x, ", ", " 01 "); print todatetime(calculatedTime)
方案2:用拆分拼接的方式,兼容性更强
如果字符串格式可能出现空格数量不稳定的情况,可以拆分后再拼接生成标准日期:
let x = "July, 2021"; // 按逗号拆分出月份和年份,trim掉多余空格后拼接 let dateParts = split(x, ","); let month = trim(" ", dateParts[0]); let year = trim(" ", dateParts[1]); print todatetime(strcat(month, " 01 ", year))
内容的提问来源于stack exchange,提问作者sacredsinner
相关产品推荐
相关产品推荐

