2

在导出数据之前,我使用以下表达式在 msaccess 查询中格式化日期

Expr1: Right$([order details]![requested delivery date],4)+Mid$([order details]![requested delivery date],4,2)+Mid$([order details]![requested delivery date],1,2)

这会从我的餐桌订单详细信息中获取一般日期(例如 11/9/2012)并将其转换为 20120911 或至少这就是我想要它做的

不幸的是,我得到了 20129/11 的输出,这是我无法使用的损坏

您可以看到 09 已神奇地更改为 9/ 我不明白如何以及为什么

有人可以告知正确的表达式应该是什么,或者是否需要对基础数据表进行任何更改。

我在表中使用一般日期格式 - 这个表达式以前工作得很好,但现在开始给我一个问题,因为拆分数据库并使用附加表 - msaccess 版本是 2003

任何建议将被认真考虑

谢谢

4

3 回答 3

1

如果您的字段的数据类型[order details]是日期/时间,则使用Format()表达式来根据需要格式化日期会更简单。

Format([order details], "yyyymmdd")
于 2012-10-19T02:34:39.397 回答
1

尝试使用格式功能:

Expr1: Format ([order details]![requested delivery date], "yyyymmdd")

对于您原始问题中的代码,没有“魔法”,只是您从“9”开始的两个字符是“9/”。

假设字段类型是 DATETIME。如果没有,你应该把它改成这样。

于 2012-10-19T02:35:50.197 回答
1

从字符串中操作日期是一个非常糟糕的主意。

一方面,您必须处理月份位置的变化,例如“2012 年 1 月 1 日”和“2012 年 10 月 10 日”。
然后,您必须处理 Access 返回的字符串高度依赖于为列指定的格式的事实,并且该格式会根据客户端的区域设置而变化。
此外,Access 理解并可能返回美国格式的日期:m/d/yyyy.

要解决您的问题,请明确使用 SQL 和 Access 提供的日期和格式化函数来操作日期。
就您而言,我认为您只需要以下Format()功能:

Format([order details]![requested delivery date], "yyyymmdd")

20120911如果您[requested delivery date]是 11SEP2012,将返回。如果您[requested delivery date]被定义为字符串,请确保它包含有效日期,并将其转换为正确的日期,使用CDate()

Format(CDate([order details]![requested delivery date]), "yyyymmdd")

如果此列设置为允许 Null 值,您将需要测试:

Iif(IsNull([order details]![requested delivery date]), Null, Format(CDate([order details]![requested delivery date]), "yyyymmdd"))

有关日期操作的更多信息,请查看以下文章:

于 2012-10-19T02:36:09.417 回答