使用 IIF() 在不打印空格的情况下连接 Access 查询中的名称字段?

Concatenate name fields in an Access query using IIF() without printing spaces?

首先,我是新手。请记住这一点...

即是说,我已经使用一个简单的公式通过查询连接 Access 中学生数据库中的姓名字段(我使用的是 Access 2013,但必须保持与 Access 2010 的兼容性)。它是这样写的:

Student Name: IIf(IsNull([Preferred First Name]),[First Name],[Preferred First Name]) & " " & [Last Name]

显示学生的首选名字和姓氏,或名字和姓氏。如果结果首先(首选或给定)为 null and/or last 为 null,显然它会在适当的地方打印 null。

Example of formula output using fictional names

嗯,这就是问题所在。正如您在示例中看到的,一名学生只有名字 Christine,打印为 "Christine "。另一个只有姓氏 Alexander,打印为 " Alexander"。它正在打印 space 无论如何。

现在我可以使用 Iif 来解决这个问题——它在示例数据库中使用,如下所示:

Student Name: IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[First Name]),IIf(IsNull([First Name]),[Last Name],[First Name] & " " & [Last Name]))

我想将 "Preferred First Name" 字段合并到该公式中,但我无法理解它。它似乎与我在自然语言中所说的相反,而且似乎缺少值。用简单的英语我设想它是这样的:

如果 [Last Name] 为 null,则只打印 [Preferred First Name],除非它为 null,在这种情况下只打印 [First Name],除非它也为 null,在这种情况下打印空值。
否则,如果 [Last Name] 有值,则打印 [Preferred First Name] & " " & [Last Name],除非 [Preferred First Name] 为空,在这种情况下打印 [First Name] & " " & [Last Name] , 除非 [First Name] 也为 null,在这种情况下只打印 [Last Name].

(澄清一下,有时我们无法获得学生的全名,所以我不能简单地将所有字段设为必填,这就是为什么我想确保无论数据是什么,它都能正确打印可用。)

如果这个问题对于这个网站来说太简单了,我深表歉意,但这似乎是最好的提问地点。感谢您的帮助。

您想使用 Trim 功能。所以,你的字符串看起来像:

Student Name: Trim(IIf(IsNull([Preferred First Name]),Trim([First Name]),
Trim([Preferred First Name])) & " " & Trim([Last Name]))

Trim 每个单独的字段(以防万一输入的数据带有额外的 space 或 2,这偶尔会发生),然后 trim 整个结果字符串得到也删除任何 spaces。