使用VB.Net查询SQL Server时处理日期字段精度问题
事件日志轮询的SQL时间匹配问题
我们有一张事件日志表,原开发人员使用标准的Date.Now将时间戳存入数据库,事件时间戳格式示例:2024-10-23 11:53:18.110。
需要开发一个监控功能:每分钟读取数据库,发送关键事件邮件。由于仅每分钟轮询一次,担心时间戳精度过高会错过事件,计划将事件时间四舍五入到整分钟,每次轮询上一分钟的数据(例如11:54时轮询2024-10-23 11:53时间段的事件)。
核心需求
- 优先通过SQL语句实现时间匹配,而非拉取所有数据后再处理
- 在SQL Server端将日期字段截断至小时和分钟级别,无需修改数据库或创建视图;若无法实现,再考虑修改事件存储方式或创建视图
现有示例代码(VB.NET)
Dim myFullDate As Date = CDate(Date.Now.ToShortDateString + " " + Date.Now.AddMinutes(-1).ToShortTimeString) Dim myParamList As New Dictionary(Of String, Object) From { {"@myDateTime", myFullDate} } Dim myEvents As DataTable = RetrieveData("SELECT [Name], [DateTime], [Description],[Severity] WHERE [DateTime]=@myDateTime", myParamList)
遇到的问题
无法写出将[EventDateTime]截断以匹配上一分钟的SQL语法,也不确定是否应创建SQL视图转为字符串进行比对。
编辑说明:此问题并非仅比较日期,不应标记为重复。
最终采纳的解决方案
采用Richard Deeming的建议:通过变量记录LastPolled时间,每次轮询时查询该时间之后的所有事件,并更新LastPolled变量,从根源避免轮询遗漏导致的事件丢失问题。
内容的提问来源于stack exchange,提问作者ADY
相关产品推荐
相关产品推荐

