如何在KQL中筛选跨日期区间内每日03:00-15:00的数据?
解决方案
可以通过两种方式实现每天仅获取03:00:00到15:00:00时段的数据,以下是具体方案:
方法1:提取小时数过滤
直接提取时间戳的小时部分,筛选出符合时段的记录:
let StartTime = todatetime("2023-10-11"); let EndTime = todatetime("2023-10-12"); Telemetry | where Timestamp between (StartTime .. EndTime) | where Name == "Scale" // 筛选每天03:00:00(含)到15:00:00(不含)的数据 | where datetime_part("hour", Timestamp) between (3 .. 14) | project Timestamp, Name, Value
如果需要严格包含15:00:00这个时刻,可调整过滤条件:
| where datetime_part("hour", Timestamp) <= 14 or (datetime_part("hour", Timestamp) == 15 and datetime_part("minute", Timestamp) == 0 and datetime_part("second", Timestamp) == 0)
方法2:构造每日精准时段范围
通过计算当天的起始时间,叠加偏移量得到当日的03:00和15:00,再判断时间戳是否落在该区间内:
let StartTime = todatetime("2023-10-11"); let EndTime = todatetime("2023-10-12"); Telemetry | where Timestamp between (StartTime .. EndTime) | where Name == "Scale" | extend day_start = startofday(Timestamp) | extend window_start = day_start + 3h | extend window_end = day_start + 15h | where Timestamp between (window_start .. window_end) | project Timestamp, Name, Value
说明
- 方法1简洁高效,适合只需按小时维度过滤的场景;
- 方法2精度更高,能严格匹配到秒级的时段边界,避免小时区间的歧义。
内容的提问来源于stack exchange,提问作者user1997
相关产品推荐
相关产品推荐

