在 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 上运行
如何在 MS ACCESS 2007 查询中使用 LIMIT
在 MS Access 2007 中对 ODBC 表导入 sql 查询