Ms access 在MS Access 2007中未正确处理查询部分的日期类型的更新集

Ms access 在MS Access 2007中未正确处理查询部分的日期类型的更新集,ms-access,Ms Access,我试图将文本日期提取到日期类型字段中,并在此过程中将格式从yyyymmdd更改为ddmmyyyy。我已经设置了一个简单的select语句,检查日期是否有效,如果没有设置默认日期,那么这个语句工作正常,没有错误的日期 SELECT IIf(isdate(Format(Left([EffectiveDate],10),"dd/mm/yyyy")),Format(Left([EffectiveDate],10),"dd/mm/yyyy"),#01/01/1900#) AS Expr1 FROM Rel

我试图将文本日期提取到日期类型字段中,并在此过程中将格式从
yyyymmdd
更改为
ddmmyyyy
。我已经设置了一个简单的select语句,检查日期是否有效,如果没有设置默认日期,那么这个语句工作正常,没有错误的日期

SELECT
IIf(isdate(Format(Left([EffectiveDate],10),"dd/mm/yyyy")),Format(Left([EffectiveDate],10),"dd/mm/yyyy"),#01/01/1900#) AS Expr1
FROM Relationships;
但当我在更新集查询中嵌入完全相同的select语句时:

UPDATE Relationships 
SET MSDate = IIf(isdate(Format(Left([EffectiveDate],10),"dd/mm/yyyy")),Format(Left([EffectiveDate],10),"dd/mm/yyyy"),#01/01/1900#);
日期的格式为
mmddyyyy
,而不是像select查询那样的
ddmmyyyy

有趣的是,当我尝试将格式类型更改为“longdate”时

我得到了默认的
01/01/1900
结果,表明提取的日期无效。顺便说一下,在Select语句中使用查询就可以了


我不禁想,在转换为日期类型的过程中发生了一些事情。我甚至尝试在查询中使用DateValue,但仍然没有乐趣。

因为您使用的是
Left([EffectiveDate],10)
,我假设文本字段实际上包含
yyyy-mm-dd
(ISO格式)

您应该保留此格式的字符串(Access理解ISO和US格式
mm/dd/yyyy
best),并使用
CDate()
函数对其进行转换

更新关系
设置MSDate=IIf(IsDate(左([EffectiveDate],10)),
CDate(左([生效日期],10)),
#1900-01-01#);

你好,安德烈。。。谢谢你…抱歉回来有点晚…基本上我希望MSDate的格式为ddmmyyyy。当我尝试你的建议时,上面的MSDate是mmddyyyy格式的。我试图像这样将Cdate函数插入到format语句中:updaterelationships SET MSDate=IIf(isdate(format(Cdate(Left([EffectiveDate],10)),“dd/mm/yyyy”)、format(Cdate(Left([EffectiveDate],10)),“dd/mm/yyyyy”)、#1/1900#;但是没有改变…但是如果我只是做了一个选择,格式就不正常了…是的,源字段是yyyymmdd格式的。日期字段只是存储一个日期,在内部是一个数字。它没有内在的格式,除了您在表设计、查询或表单字段中定义的格式在更新查询中不需要
格式
,只需要
CDate
。好的,我明白你的意思了。。。。因此,如果我的代码需要处理存储在MSDate中的日期,并以ddmmyyyy的形式呈现给它,那么我必须在代码处理它之前将其格式化,而不是在代码处理它之前格式化?@LaurenceLockLee:e-xact-ly!:)
UPDATE Relationships 
SET MSDate = IIf(isdate(Format(Left([EffectiveDate],10),"long date")),Format(Left([EffectiveDate],10),"dd/mm/yyyy"),#01/01/1900#);