从日期时间字段查询中搜索日期不起作用
Posted
技术标签:
【中文标题】从日期时间字段查询中搜索日期不起作用【英文标题】:search date from date time field query not working 【发布时间】:2020-01-31 14:55:20 【问题描述】:我有以下查询
sql_query = "select * from bericht where fromtime = " & Me.von & " and b_date = #" & Me.l_date & "#"
它通过调试打印下一行。
select * from bericht where fromtime = 6 and b_date = #1/30/2020#
在表中b_date
是dateTime field
。 (来自 Msaccess 中的 SQL 服务器的链接表)
在此表中存在1/30/2020 2:00:00 PM
的数据,其中fromtime
也是6。
为什么查询没有返回任何数据?
msaccess 不能在日期时间字段中搜索日期吗?
PS:fromtime
是整数而不是时间字段。
【问题讨论】:
【参考方案1】:因为#1/30/2020#
1/30/2020 2:00:00 PM
。
在进行比较之前,将列转换为日期,而不是日期时间。
... and DateValue(b_date) = #" & Me.l_date & "#"
这将返回从该日期开始满足您的其他条件的所有行。
【讨论】:
它有效。这意味着在我使用 DateValue 之前,ms access 不会将我的值视为日期。 不,不完全是这样。在将日期与日期时间进行比较时,Access 和我知道的所有其他数据库都假定日期的时间值为午夜。所以你将1/30/2020 2:00:00 PM
与1/30/2020 12:00:00 AM
进行比较。这些是不同的值,所以没有匹配。使用DateValue
函数去除表中值的时间,只比较日期,忽略时间部分。【参考方案2】:
同样,考虑搜索日期范围内的所有日期时间,因为DateValue
可能会出现效率问题:
select * from bericht
where fromtime = 6
and b_date >= CDate("2020-01-30")
and b_date < CDate("2020-01-30") + 1
并直接指向表单/报告字段。将下面另存为存储查询,并在 VBA 中根据需要使用DoCmd.OpenQuery
调用它:
select * from bericht
where fromtime = Forms!myForm!von
and b_date >= [Forms!myForm!l_date]
and b_date < ([Forms!myForm!l_date] + 1)
如果对记录集构建使用查询,仍然使用首选参数化方法,仍然使用存储查询并在 VBA 中使用 QueryDefs 打开它并绑定所需的parameters at运行时:
SQL
parameters [myint] int, [mydate] date;
select * from bericht
where fromtime = [myint]
and b_date >= [mydate]
and b_date < ([mydate] + 1)
VBA
Dim qDef As QueryDef
Dim rst As Recordset
Set qdef = CurrentDb.QueryDefs("mySavedQuery")
qdef!myint = Me.von
qdef!myDate = Me.l_date
Set rst = qdef.OpenRecordset()
...
【讨论】:
以上是关于从日期时间字段查询中搜索日期不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥具有 ISO 8601 值的日期时间字段在 iOS webkit 浏览器中不起作用?