从日期时间字段查询中搜索日期不起作用

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_datedateTime 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 PM1/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()

...

【讨论】:

以上是关于从日期时间字段查询中搜索日期不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当前日期查询不起作用HQL

为啥具有 ISO 8601 值的日期时间字段在 iOS webkit 浏览器中不起作用?

更改后,日期选择器验证不起作用-BootStrap

MYSQL:使用 date_format 查询两个日期之间的数据不起作用

谷歌自定义搜索排序日期范围标准不起作用

试图从 laravel 中的日期获取月份(并且 postgres 提取不起作用)