2014-10-09 3 views
2

Я пытаюсь получить количество дней между двумя датами. Вот выражение, которое я использую в Access Query Designer. (Access 2007)DateDiff Access Query return #Error

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

Запрос возвращает #Error.

Формат [Accept Date] и [Sent Date] - yyyymmdd, а тип данных - TEXT. Я изменил его на дату/время, но Access очистил данные.

Вот SQL за Query, если это помогает:

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 

Если доступ по-прежнему выдает ошибку, используйте CDate бросить дату текст для даты/времени типа данных.

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

Ваша задача будет менее сложной с использованием фактических полей даты/времени. Вы можете создать новые поля Date/Time и выполнить запрос UPDATE для загрузки преобразованных значений из полей старой текстовой даты.

+0

Спасибо за ваше время! Это сработало хорошо. – Derek

+0

... Мне не нужно было использовать CDate(). – Derek