2017-03-02 19 views
0

我正在使用MS Access,當然也是新手,我無法完全明白爲什麼我無法使其工作。這似乎應該是顯而易見的,因爲這必須是一個常見的問題。我試過在這裏和網絡的其他部分搜索,但是我發現似乎並不適合我,或者僅僅是不夠類似。WHERE date() - dateField> = -1數據類型不匹配

當我嘗試運行以下查詢時,我得到了「數據類型在標準表達式中不匹配」。我希望查詢返回小於或等於當前日期前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

假設你的系統被拆分FE/BE,你的後端Access?或者是其他東西?訪問沒有「日期」類型字段。它有'日期/時間'。 SQL Server具有「日期」,但可能無法被Access識別爲日期/時間。 如果它實際上是一個日期/時間字段,下面應該工作,也是更有效比在where子句中對字段的計算:

WHERE sDate <= Date()-1 
+0

我知道我要仔細考慮這個問題。我認爲有必要將輸入日期的日期/時間字段與輸入時間的日期/時間字段相結合,以獲得<=當前日期減1的準確返回值,但只需將sDate字段與WHERE語句一起使用AVG響應證明簡單有效。 – Eddie

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