如何将时间(年)添加到表中的日期列

时间:2014-02-18 16:35:44

标签: sql ms-access ms-access-2007 dateadd

我正在使用Acceess 2007中的Northwind Microsoft Access数据库。在Orders表中有三个日期字段:OrderDate,RequiredDate和ShippedDate。

所有这些领域都在1994-1996。我正在尝试将其输入到ETL系统中,但该系统不允许超过15年的日期。

我想在这三个领域中增加10年。

我正在尝试这样的事情: 更新订单 设置OrderDate = DateAdd(“yyyy”,10,OrderDate)

...但收到错误“参数太少。预计1.” 当我看到这个错误时,它通常是使用的列名中的拼写错误,但我在这里没有看到它。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

问题绝对不是由于DateAdd的语法错误造成的。此立即窗口示例演示了您的DateAdd语法是否有效。

? DateAdd("yyyy",10,Date())
2/18/2024 

它在VBA代码或查询中的工作方式相同。

请注意,Access字段可以包含 name caption 属性。

field properties showing name and caption

当某个字段分配了字幕时,在许多情况下使用该字幕代替字段的名称。其中一种情况是直接在数据表视图中打开表。

因此,在您的情况下,该表可能包含一个字段,其标题为" OrderDate ",但实际的字段名称是其他内容。在查询中,您必须使用该名称,因为Access无法识别标题,假设它必须是参数,并且您希望为参数提供值。

检查表格设计,确保您在查询中使用实际字段名称。

您可以通过在Access查询设计器中构建查询来避免此问题。将其作为SELECT查询启动,并从可用的字段名称中进行选择。在将其作为SELECT正常工作后,您可以将其转换为实际需要的UPDATE

Access提供方便的手持功能。有时他们会按照自己的方式行事并变得烦人。但这是Access'有用的倾向可以真正有用。 : - )

原来我从Access 2007获得了Northwind的副本。至少在我的副本中,该字段被命名为" Order Date"。因此,标题不是罪魁祸首。只需括起字段名称,以便Access将其识别为"一件事"而不是两个。

UPDATE Orders
SET [Order Date] = DateAdd("yyyy",10,[Order Date]);

请注意,这是查询设计人员可以帮助您避免的另一个问题示例。

答案 1 :(得分:0)

我最终进入创建然后进入查询设计。在那里,功能区现在将设计显示为选项卡。我单击Update,然后单击SQL视图并粘贴它,然后切换到设计视图。保存查询后,我尝试运行它,由于某些安全功能被禁用,它失败了。我启用它并更新数据库确定。 最终这样做了:

UPDATE Orders SET RequiredDate = DateAdd("yyyy",10,RequiredDate);
UPDATE Orders SET OrderDate = DateAdd("yyyy",10,OrderDate);
UPDATE Orders SET ShippedDate = DateAdd("yyyy",10,ShippedDate);

感谢大家的帮助。

答案 2 :(得分:-2)

而不是DATEADD(“yyyy”,10,OrderDate)

将其设为DATEADD(年,10,OrderDate)