如何按当前日期(不含时间)过滤DataGridView中的SQL数据?
按当日日期筛选DataGridView数据的解决方案
一、在SQL查询阶段直接过滤(推荐)
因为datetime类型包含时间部分,直接用等于当日日期的条件只会匹配时间为00:00:00的记录,所以要改用范围查询或日期截断的方式:
不同数据库对应写法:
- MySQL:
-- 简单写法(若日期字段无索引,效率略低) SELECT * FROM 你的表名 WHERE DATE(日期字段) = CURDATE(); -- 高效写法(可利用字段索引,优先推荐) SELECT * FROM 你的表名 WHERE 日期字段 >= CURDATE() AND 日期字段 < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
- SQL Server:
-- 简单写法 SELECT * FROM 你的表名 WHERE CAST(日期字段 AS DATE) = CAST(GETDATE() AS DATE); -- 高效写法 SELECT * FROM 你的表名 WHERE 日期字段 >= CAST(GETDATE() AS DATE) AND 日期字段 < DATEADD(DAY, 1, CAST(GETDATE() AS DATE));
- Oracle:
SELECT * FROM 你的表名 WHERE TRUNC(日期字段) = TRUNC(SYSDATE);
二、客户端DataGridView筛选(已加载全部数据时)
如果数据已经全部加载到DataTable中,可通过行筛选实现当日数据过滤:
DateTime todayStart = DateTime.Today; DateTime todayEnd = todayStart.AddDays(1); -- 替换成你的DataTable中日期字段的实际名称 dataTable.DefaultView.RowFilter = $"日期字段 >= #{todayStart:yyyy-MM-dd}# AND 日期字段 < #{todayEnd:yyyy-MM-dd}#"; dataGridView1.DataSource = dataTable.DefaultView;
内容的提问来源于stack exchange,提问作者Ismail Anna
相关产品推荐
相关产品推荐

