为什么在 Microsoft Access 中比较日期时出现数据类型不匹配,即使我使用的是 # 分隔符?
Why am I getting a Data Type Mismatch when comparing a date in Microsoft Access even though I am using the # delimiter?
我有 table 参加过 class 的人的名字以及他们参加 class 的时间戳。这存储在 Access 中。我正在尝试获取在给定日期参加 class 的人员的姓名。我写的代码如下:
SELECT [Person Name], DateValue([Activity Start Date]) FROM [2019 Learning]
WHERE DateValue([Activity Start Date]) = #11/14/2019#
即使我要查找的日期包含在 table 中,当我 运行 查询时它会工作一秒钟然后我收到一条错误消息说
"Data type mismatch in criteria expression."
然后它将所有返回的数据更改为“#Name?
”。谁能帮我解释一下为什么会出现这个错误?
DateValue() 函数错误为 null。提供替代值。可以使用Nz()函数。
DateValue(Nz([Activity Start Date], Date())) = #11/14/2019#
或者使用假定不在数据库中的日期,例如#12/31/2999#,而不是 Date()。
如果您想双重确保不捕获带有 null 的记录,请包括额外的过滤条件,但仍要在等式中处理 Null。并使用动态输入,如:
DateValue(Nz([Activity Start Date], Date())) = [Forms]![MyForm]![MyControl] AND NOT [Activity Start Date] IS NULL
而不是用值代替 Null
(这可能会导致 undesired/confusing 结果,如果这些值由查询输出),另一种方法可能是避免datevalue
在 where
子句中完全起作用。
由于 MS Access 中的日期时间仅仅是数值,数字的整数部分代表日期部分,小数部分代表一天的小数部分,或时间部分,您可以使用以下方法获取所有记录#11/14/2019#
:
select [Person Name], datevalue([Activity Start Date])
from [2019 Learning]
where [Activity Start Date] >= #11/14/2019# and [Activity Start Date] < #11/15/2019#
此处,Null
值被自动排除,因为两个比较运算符将 return Null
与 Null
一起提供,从而排除记录。
我有 table 参加过 class 的人的名字以及他们参加 class 的时间戳。这存储在 Access 中。我正在尝试获取在给定日期参加 class 的人员的姓名。我写的代码如下:
SELECT [Person Name], DateValue([Activity Start Date]) FROM [2019 Learning]
WHERE DateValue([Activity Start Date]) = #11/14/2019#
即使我要查找的日期包含在 table 中,当我 运行 查询时它会工作一秒钟然后我收到一条错误消息说
"Data type mismatch in criteria expression."
然后它将所有返回的数据更改为“#Name?
”。谁能帮我解释一下为什么会出现这个错误?
DateValue() 函数错误为 null。提供替代值。可以使用Nz()函数。
DateValue(Nz([Activity Start Date], Date())) = #11/14/2019#
或者使用假定不在数据库中的日期,例如#12/31/2999#,而不是 Date()。
如果您想双重确保不捕获带有 null 的记录,请包括额外的过滤条件,但仍要在等式中处理 Null。并使用动态输入,如:
DateValue(Nz([Activity Start Date], Date())) = [Forms]![MyForm]![MyControl] AND NOT [Activity Start Date] IS NULL
而不是用值代替 Null
(这可能会导致 undesired/confusing 结果,如果这些值由查询输出),另一种方法可能是避免datevalue
在 where
子句中完全起作用。
由于 MS Access 中的日期时间仅仅是数值,数字的整数部分代表日期部分,小数部分代表一天的小数部分,或时间部分,您可以使用以下方法获取所有记录#11/14/2019#
:
select [Person Name], datevalue([Activity Start Date])
from [2019 Learning]
where [Activity Start Date] >= #11/14/2019# and [Activity Start Date] < #11/15/2019#
此处,Null
值被自动排除,因为两个比较运算符将 return Null
与 Null
一起提供,从而排除记录。