CDate 函数正在重新格式化并产生错误

CDate Function is being reformatted and creates an Error

我有一个 select 查询,它有一个存储为字符串的日期,例如20211231(2021 年 12 月 31 日)。我正在尝试使用 CDate 函数来转换字符串。如果我在 SQL 视图

中输入以下内容
SELECT CDate(Format([XLCustOrdDtl]![DATE_ADDED],"####/##/##")) AS DteAdded
FROM XLCustOrdDtl;

结果符合预期,但是当我返回设计视图并 运行 查询时,Access 将字符串重新格式化为

SELECT CDate(Format([XLCustOrdDtl]![DATE_ADDED],"#\/#\/#")) AS DteAdded
FROM XLCustOrdDtl;

这导致#Error

关于为什么会发生这种情况以及我如何解决这个问题有什么想法吗?

显然,字符串中缺少连字符或斜杠标点符号意味着 Access 无法识别日期部分,# 是日期分隔符,不能用作日期格式占位符。

假设没有 Null 字段并且总是有 8 位数字,包括占位符零,请考虑:

DateSerial(Left([DATE_ADDED],4), Mid([DATE_ADDED]5,2), Right([DATE_ADDED],2))

因为你的日期是文本,让 Format 知道这一点并使用 @

另请注意,格式化斜杠不是斜杠,而是本地 日期分隔符。要强制使用文字斜杠,请使用反斜杠将其转义:

SELECT CDate(Format([XLCustOrdDtl]![DATE_ADDED],"@@@@\/@@\/@@")) AS DteAdded
FROM XLCustOrdDtl;