非日期字段的查询表达式中的日期语法错误

Posted

技术标签:

【中文标题】非日期字段的查询表达式中的日期语法错误【英文标题】:Syntax error in date in query expression for non-date fields 【发布时间】:2018-01-05 17:06:49 【问题描述】:

我在 Access 2013 中构建查询时遇到问题。数据库不是我的,我唯一真正可以控制的是这个查询。有一个表,我从中提取 7 个字段,并最终将第 8 个字段添加到查询中以进行一些字符串操作。

但是,我不断收到“查询表达式 'fieldname' 中的日期语法错误”。每当我单击箭头对字段进行排序时都会出错。奇怪的是,在对非日期字段进行排序时会弹出这些错误。在对日期字段进行排序时,我得到“查询表达式'发布日期'中的语法错误(缺少运算符)。”

这发生在全新构建之后。我没有 WHERE 条件,只有 SELECT 和 FROM。想法?

这是 sql 查询,虽然我主要在查询设计视图中工作:

SELECT Transmissions.[Job#], Transmissions.[Part#], Transmissions.TransmissionSN, Transmissions.Status, Transmissions.[Release Date], Transmissions.[Build Book Printed], Transmissions.[ID Tags Required]
FROM Transmissions;

【问题讨论】:

我刚刚注意到唯一给我带来麻烦的字段是括号中的字段。传输SN 和状态不会给我错误。 【参考方案1】:

嗯...看来你是一个设计不佳的数据库的幸运继承者。

在字段名称中使用特殊字符只是自找麻烦。你已经发现了问题所在。

Access 使用# 符号来指定用于查询比较的日期类型。如:

dtSomeDate = #2/20/2017#

您用# 符号包围日期。

在您的情况下,查询认为 [Job#][Part#] 正在尝试包装日期。但当然,事实并非如此,因此它失败了。

您可以尝试几种解决方法。 (我把它留给你去试验。)

1) 您可以尝试重命名查询中的问题字段。所以:

Transmissions.[Job#] 变为 Transmissions.[Job#] as JobNum

Transmissions.[Part#] 变为 Transmissions.[Part#] as PartNum

2) 您可以尝试将 [Transmissions] 表复制到您创建的新表中 没有命名问题。

3) 将 [Transmissions] 表导出到 CSV 文件并重新导入到新的 没有命名问题的表(或可能是新数据库)。

这里是一篇微软文章的链接,它告诉你为什么要避免在 Access 中使用特殊字符:

Big Bad Special Chars.

希望这能让您走上正轨。 :)

【讨论】:

谢谢。我实际上决定通过导出到 excel 来处理数据,因为 excel 并不关心列标题是什么。我认为这与使用空格和井号的字段名称有关。我忘记了 # 用于日期(我还没有真正使用过该功能。)是的,这是一个糟糕的数据库。我的公司有一个不良习惯,即对访问权限要求过高,并且使用糟糕的技术。我们确实可以使用专用的 SQL 数据库,但它的功能太不耐烦了,无法等待适当的设置。【参考方案2】:

通常,这意味着字段名称丢失或拼写错误。

试着运行一下看看:

SELECT * FROM Transmissions;

【讨论】:

我发现这不太可能,因为我从设计视图中的表格框中选择了字段(因此 Access 将是拼写错误的那个)。也就是说,我尝试了星号,但我仍然遇到同样的问题。 星号将返回所有字段。

以上是关于非日期字段的查询表达式中的日期语法错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL日期查询中的VBA变量

Sql出错:日期的语法错误 查询数据的时候发现错误,请检查您的查询代码是不是正确。

问: (VFP)在下列有关日期时间型表达式中,语法上不正确的是____. A.DATETIM()-

提取日期:django.db.utils.OperationalError:接近“无”:语法错误

从 Excel 中查询 Access 中的常规日期字段(错误 13)

当我尝试通过 C# 将日期插入 Access 数据库时出现“INSERT INTO 语句中的语法错误”错误