2014-10-09 74 views
2

我想獲取兩個日期之間的天數。 這是我在Access查詢設計器中使用的表達式。 (Access 2007)DateDiff訪問查詢返回#Error

Expr1: DateDiff('d',[Accept Date],[Sent Date]) 

查詢返回#Error。

[接受日期]和[發送日期]格式爲yyyymmdd,數據類型爲TEXT。 我將其更改爲日期/時間,但Access清除了數據。

這裏是查詢後面的SQL是否有幫助:

SELECT RTG.[PRO NO], RTG.[Service], RTG.[Sent Date], RTG.[Accept Date], DateDiff('d',[Accept Date],[Sent Date]) AS Expr1 
FROM RTG 
WHERE (((RTG.[PRO NO Prefix])<>"215") AND ((RTG.[Invoice Number])="8548")); 

這一定是簡單的東西,對不對?

回答

3

DatePart可以接受實際上是文本而不是日期/時間數據類型的日期。但是,該文本必須是Access被認定爲有效日期表示的內容。 「yyyymmdd」格式的文本日期不符合該要求。例如,在立即窗口...

? IsDate("20141009") 
False 

但是,如果你的年,月,日段之間插入破折號,Access能夠識別的文本字符串爲日期。

? Format("20141009", "0000-00-00") 
2014-10-09 
? IsDate(Format("20141009", "0000-00-00")) 
True 

在一個簡單的查詢中測試該技巧以確保它避免了錯誤。

SELECT 
    RTG.[Sent Date], 
    RTG.[Accept Date], 
    DateDiff(
     'd', 
     Format([Accept Date],'0000-00-00'), 
     Format([Sent Date],'0000-00-00') 
    ) AS Expr1 
FROM RTG 

如果Access仍拋出一個錯誤,用CDate投文本日期日期/時間數據類型。

DateDiff(
     'd', 
     CDate(Format([Accept Date],'0000-00-00')), 
     CDate(Format([Sent Date],'0000-00-00')) 
    ) AS Expr1 

對於實際的日期/時間字段,您的任務難度較低。您可以創建新的日期/時間字段並執行UPDATE查詢以從舊文本日期字段加載轉換後的值。

+0

謝謝你的時間!這很好。 – Derek 2014-10-09 14:57:06

+0

...我不需要使用CDate()。 – Derek 2014-10-09 14:58:45