ms访问数据库查询中的日期格式损坏

时间:2012-10-19 02:16:39

标签: ms-access

我使用以下表达式在导出数据之前格式化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)

这会从我的表格订单详细信息(例如2012年9月9日)中获取一般日期并将其转换为20120911或至少是我想要它做的事情

不幸的是我得到的输出是20129/11,这是一个我无法使用的腐败

你可以看到09已被神奇地改为9 /并且我不明白为什么以及为什么

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

我在表格中使用了一般日期格式 - 这个表达式之前工作正常,但现在开始给我一个问题,因为拆分数据库和使用attatched表 - msaccess版本是2003

任何建议都将受到赞赏

感谢

3 个答案:

答案 0 :(得分:1)

如果[order details]字段的数据类型为日期/时间,则可以更轻松地使用Format()表达式格式化日期。

Format([order details], "yyyymmdd")

答案 1 :(得分:1)

尝试使用格式化功能:

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

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

假设字段类型为DATETIME。如果没有,你应该改变它。

答案 2 :(得分:1)

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

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

要解决您的问题,请明确使用SQL和Access提供的日期和格式设置功能来操作日期 在您的情况下,我认为您只需要Format()函数:

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

如果您的20120911是11SEP2012,则会返回[requested delivery date]。 如果您的[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"))

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