如何使用查询设置字段的年份部分
Posted
技术标签:
【中文标题】如何使用查询设置字段的年份部分【英文标题】:How to set the year part of a field using a query 【发布时间】:2013-08-29 16:21:28 【问题描述】:晚上,
我创建了一个查询,假设当一个人年满 89 岁时,该查询仅将 Date/Time
字段的年份部分更改为 1900。后面的查询编译得很好,但是运行时它会抱怨 Type Conversion failure
并从受影响的记录中删除整个值。
查询:
UPDATE tblTestForDOB
SET tblTestForDOB.[PT_BirthDate] = DateValue( (day([PT_BirthDate])/month([PT_BirthDate])/1900) )
WHERE Year(tblTestForDOB.[PT_BirthDate]) <= Year(Date())-"89";
根据MS Help(F1过功能):
所需的日期参数通常是一个字符串表达式,表示从 100 年 1 月 1 日到 9999 年 12 月 31 日的日期。但是,日期也可以是任何可以表示日期、时间或日期和时间的表达式,在那个范围内。
这不是我在做的吗?我还尝试将" " &
放在DateValue
函数内的值之前,并且做了同样的事情
(确保它是一个被传递的字符串)
那么我该怎么做呢?我应该使用CDate
将值转换为日期然后继续吗?如果是这样,正确的语法是什么?
谢谢
P.S 该字段为Short Date
格式。另请注意,我不想花很长时间并在整个过程中使用 VBA,因为这将涉及打开记录集等等......
【问题讨论】:
【参考方案1】:您似乎正在尝试给DateValue
一个字符串,但这不是正在发生的事情。可能还有更多我不明白的地方,所以我将向您展示一个即时窗口会话,其中可能包含您可以构建的东西。
PT_BirthDate = #1923-6-1#
? PT_BirthDate
6/1/1923
? DateDiff("yyyy", PT_BirthDate, Date())
90
' this throws error #13: Type mismatch ...
? DateValue( (day([PT_BirthDate])/month([PT_BirthDate])/1900) )
' it will work when you give DateValue a string ...
? DateValue("1900-" & Month(PT_BirthDate) & "-" & Day(PT_BirthDate))
6/1/1900
' or consider DateSerial instead ...
? DateSerial(1900, Month(PT_BirthDate), Day(PT_BirthDate))
6/1/1900
【讨论】:
很好的答案 - 即时窗口现在已成为我最喜欢的东西 :) 谢谢 很高兴听到你这么说。每个 Access 开发人员都应该让即时窗口成为他最好的朋友之一。 :-)以上是关于如何使用查询设置字段的年份部分的主要内容,如果未能解决你的问题,请参考以下文章