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

Posted

技术标签:

【中文标题】在 MS Access 2007 中未正确处理查询部分的日期类型的更新集【英文标题】:Update-Set for a Date type not processing query part correctly in MS Access 2007 【发布时间】:2016-01-16 22:52:50 【问题描述】:

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

SELECT
IIf(isdate(Format(Left([EffectiveDate],10),"dd/mm/yyyy")),Format(Left([EffectiveDate],10),"dd/mm/yyyy"),#01/01/1900#) AS Expr1
FROM Relationships;

但是当我在更新集查询中嵌入这个完全相同的选择语句时:

UPDATE Relationships 
SET MSDate = IIf(isdate(Format(Left([EffectiveDate],10),"dd/mm/yyyy")),Format(Left([EffectiveDate],10),"dd/mm/yyyy"),#01/01/1900#);

日期格式为mmddyyyy,而不是像选择查询那样ddmmyyyy

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

UPDATE Relationships 
SET MSDate = IIf(isdate(Format(Left([EffectiveDate],10),"long date")),Format(Left([EffectiveDate],10),"dd/mm/yyyy"),#01/01/1900#);

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

我不禁想到在转换为日期类型时发生了一些事情。我什至尝试在查询上做 DateValue 但仍然没有乐趣。

【问题讨论】:

【参考方案1】:

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

您应该保留这种格式的字符串(Access 最好理解 ISO 和美国格式 mm/dd/yyyy),然后使用 CDate() 函数对其进行转换。

UPDATE Relationships 
SET MSDate = IIf(IsDate(Left([EffectiveDate],10)), 
                  CDate(Left([EffectiveDate],10)), 
                  #1900-01-01#);

【讨论】:

嗨安德烈...谢谢你...抱歉有点迟到了...基本上我希望将 MSDate 格式化为 ddmmyyyy。当我在 MSDate 上方尝试您的建议时,它采用 mmddyyyy 形式。我试图将 Cdate 函数插入到我的格式语句中,如下所示: UPDATE Relationships SET MSDate = IIf(isdate(Format(Cdate(Left([EffectiveDate],10)),"dd/mm/yyyy")),Format(Cdate (左([EffectiveDate],10)),"dd/mm/yyyy"),#1/1/1900#);但是没有变化......但是,如果我只是在做一个选择,那么格式化当然可以工作......是的,源字段是 yyyymmdd 格式 日期字段只存储一个日期,在内部作为一个数字。它没有固有格式,除了您在表格设计或查询或表单字段中定义的格式。 -- UPDATE 查询中不需要Format,只需要CDate 好的,我明白你的意思了....所以如果我有代码需要处理存储在 MSDate 中的日期,并以 ddmmyyyy 形式呈现给它,那么我必须在输出之前对其进行格式化代码处理它,而不是进入? @LaurenceLockLee:e-xact-ly! :)

以上是关于在 MS Access 2007 中未正确处理查询部分的日期类型的更新集的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2007 查询不在 SQL Server 2008 上运行

Access 2007 中未找到模块错误

如何在 MS ACCESS 2007 查询中使用 LIMIT

在 MS Access 2007 中对 ODBC 表导入 sql 查询

如何在 Ms Access 2007 中执行 Mysql 查询

如何在 MS Access 2007 中获取 sql 查询