我正在使用MS Access,当然是新手,我无法完全理解为什么我无法使用它。对我来说似乎应该是显而易见的,因为这必须是一个常见的查询。我已经尝试在这里和网络的其余部分进行搜索,但我发现的内容对我来说似乎没有用,或者只是不够相似。
当我尝试运行以下查询时,我得到“条件表达式中的数据类型不匹配”。我希望查询返回小于或等于当前日期前1天的记录。
我正在使用两个日期字段,将它们组合在一起,然后使用DateDiff()
来区分:如果我删除WHERE语句,这将按预期工作。
SELECT DateDiff("d",Date(),DateValue([sDate])+TimeValue([stime])) AS Expr1, tblEncounters.EID
FROM tblEncounters
WHERE (((DateDiff("d",Date(),DateValue([sDate])+TimeValue([stime])))>=-1));
然后我尝试了一个子查询:
'--- qryEncountersDesc ---
SELECT DateDiff("d",Date(),DateValue([sDate])+TimeValue([stime])) AS Expr1, tblEncounters.EID
FROM tblEncounters;
SELECT tblEncounters.firstName, tblEncounters.lastName, qryEncountersDesc.Expr1
FROM tblEncounters INNER JOIN qryEncountersDesc ON tblEncounters.EID = qryEncountersDesc.EID
WHERE (((qryEncountersDesc.Expr1)>=-1));
我尝试了不同的方法来执行计算以获得日期差异,并且它们都有效。但我想不出还有什么可以尝试WHERE语句。我已经尝试过formatnumber()CDbl()等。
答案 0 :(得分:0)
假设您的系统是FE / BE分割,那么您的后端是Access吗?或者是其他东西?访问没有日期'日期'类型字段。它有'日期/时间'。 SQL Server具有“日期”,但Access可能无法将其识别为日期/时间。 如果它实际上是日期/时间字段,则以下内容应该起作用,并且比在where子句中对字段的计算更有效:
WHERE sDate <= Date()-1
答案 1 :(得分:0)
您很可能拥有Null值,因此请尝试排除这些值:
SELECT
DateDiff("d",Date(),DateValue([sDate])+TimeValue([stime])) AS Expr1,
tblEncounters.EID
FROM
tblEncounters
WHERE
(((DateDiff("d",Date(),DateValue([sDate])+TimeValue([stime])))>=-1)
AND
([sDate] Is Not Null And [sTime] Is Not Null);
或者如果您的条目无效(包括Null):
SELECT
DateDiff("d",Date(),DateValue([sDate])+TimeValue([stime])) AS Expr1,
tblEncounters.EID
FROM
tblEncounters
WHERE
(((DateDiff("d",Date(),DateValue([sDate])+TimeValue([stime])))>=-1)
AND
(IsDate([sDate]) And IsDate([sTime]));