我想获得两个日期之间的天数。 这是我在Access Query Designer中使用的表达式。 (Access 2007)
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"));
这必须简单,对吧?
答案 0 :(得分:3)
DatePart
可以接受实际为text而不是Date / Time数据类型的日期。但是,文本必须是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
查询以从旧文本日期字段加载转换后的值。