WHERE date() - dateField> = -1数据类型不匹配

时间:2017-03-02 10:20:02

标签: sql ms-access

我正在使用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()等。

2 个答案:

答案 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]));