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

Azure Log Analytics中解析IntuneDevices表CreatedDate字符串提取日期的正则表达式问题

解决Kusto中IntuneDevices表CreatedDate日期提取问题

嘿,我来帮你搞定这个Kusto里的日期提取问题!你的核心需求是从2021-05-17 07:33:41.0000000这种格式的字符串里提取日期部分,其实有好几种简单的方法,先给你最直接的解决方案:

1. 最简单高效:用substring直接截取

因为你的CreatedDate格式是固定的YYYY-MM-DD开头,前10个字符正好是日期部分,直接截取就行,完全不用正则:

IntuneDevices 
| where TimeGenerated > ago(1d) 
| extend CreatedDateOnly = substring(CreatedDate, 0, 10)
| project TimeGenerated, CreatedDate, now(), CreatedDateOnly

2. 用parse函数修正正则逻辑

你之前的parse语句问题出在正则的匹配顺序上,应该让正则先捕获日期部分,再忽略后面的内容。试试这个:

IntuneDevices 
| where TimeGenerated > ago(1d) 
| parse kind=regex CreatedDate with CreatedDateOnly '\\s.*'  // 匹配第一个空格前的所有内容(就是日期)
| project TimeGenerated, CreatedDate, now(), CreatedDateOnly

如果想要更精确匹配日期格式,也可以写完整的正则:

IntuneDevices 
| where TimeGenerated > ago(1d) 
| parse kind=regex CreatedDate with '(\\d{4}-\\d{2}-\\d{2})\\s.*' CreatedDateOnly
| project TimeGenerated, CreatedDate, now(), CreatedDateOnly

3. 用extract函数正确匹配

你之前测试extract时,正则写的是找带方括号的日期,但你的实际CreatedDate没有方括号,所以匹配不到。调整正则去掉方括号就行:

IntuneDevices 
| where TimeGenerated > ago(1d) 
| extend CreatedDateOnly = extract(@'(\\d{4}-\\d{2}-\\d{2})', 1, CreatedDate)
| project TimeGenerated, CreatedDate, now(), CreatedDateOnly

为什么你之前的尝试失败了?

  • 第一次parse用了"(\\d\\d\\d\\d[-]\\d\\d[-]\\d\\d)*",这里的*表示匹配0或多次,而且没处理后面的内容,导致Kusto误匹配了时间部分的数字。
  • 第二次parse里的*是贪婪匹配,会吃掉前面所有内容,然后反向找符合正则的字符串,自然抓到了后面的时间部分。
  • 你的extract测试案例里,正则带了方括号\[...\],但实际数据没有方括号,所以完全匹配不到,返回空。

额外加分项:直接转成日期类型对比

既然你最终要和now()比较,其实不用只提取日期,直接把CreatedDate转成datetime类型更方便,Kusto的todatetime能自动识别这种格式:

IntuneDevices 
| where TimeGenerated > ago(1d) 
| extend CreatedDateTime = todatetime(CreatedDate)
| where CreatedDateTime > ago(30d)  // 示例:筛选30天内创建的设备
| project TimeGenerated, CreatedDate, CreatedDateTime, now()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:59:06