如何在msaccess数据库中按单个日期进行搜索



我想按日期从ms访问数据库中搜索记录。我已经将日期存储在ms访问表中;2020年8月23日下午5:31:21";。我遇到语法错误。我该怎么做?

Dim x As Date = DateTimePicker1.Value

Dim command As New OleDbCommand("select col1,col2,col3 where table1.datetime = @datetime", connection)
command.Parameters.AddWithValue("@datetime", x.ToString("mm/dd/yy"))

Pete-S-建议的代码

及其工作。

在这篇文章中,我已经将ms访问中的数据类型更改为shortdate

Dim x As Date = DateTimePicker1.Value

Dim command As New OleDbCommand("select col1,col2,col3 From table1 where ([datetime] >= @startDate And [datetime] <= @endDate)", connection)
Dim dateParameter As OleDbParameter = command.Parameters.Add(New OleDbParameter("@startDate", OleDbType.Date))
dateParameter.Value = x.Date
dateParameter =  command.Parameters.Add(New OleDbParameter("@endDate", OleDbType.Date))
dateParameter.Value = DateAdd(DateInterval.Day,1,x.Date)

@Steve指出了时间问题,当搜索包含时间和日期的日期时,一个解决方案是搜索一天的整个范围:

选项1:table1.datetime>='8/23/20'和table1.datetime<'8/24/20'

Dim command As New OleDbCommand("select col1,col2,col3 From table1 where ([datetime] >= @startDate And [datetime] < @endDate)", connection)

command.Parameters.AddWithValue("@startDate", x.Date)
command.Parameters.AddWithValue("@endDate", DateAdd(DateInterval.Day,1,x.Date))

添加参数的首选方法,在添加参数时明确设置数据类型:

Dim dateParameter As OleDbParameter = command.Parameters.Add(New OleDbParameter("@startDate", OleDbType.Date))
dateParameter.Value = x.Date
dateParameter =  command.Parameters.Add(New OleDbParameter("@endDate", OleDbType.Date))
dateParameter.Value = DateAdd(DateInterval.Day,1,x.Date)

如果x = 8/23/2020,则执行的SQL将是select col1,col2,col3 From table1 where (table1.datetime >= '8/23/20' And table1.datetime < '8/24/20')

这将包括2020年8月23日00:00:00至23:59:59之间的所有时间…(第二天之前(。如果未指定时间,则假定为00:00:00。这就是为什么在搜索时,平等和时间并没有像你认为的那样发挥出来。

选项2:table1.datetime>='8/23/20'和table1.datetime<='8/23/20 23:59:59'将时间明确添加到搜索值中。这将在99.99%的时间内起作用,除非存储的值的时间戳在23:59.59.0001和00:00:00.00000之间,可以过滤掉。

最新更新