将多个字段合二为一的计算字段

calculated field combining multiple fields into one

我正在尝试根据 4 位自动编号、名字的第一个字母和姓氏在计算字段中创建一个值以创建用户名。我打算创建类似这样的用户名 -> flastname0001。

这是我用于表达的内容: LCase(Left([firstname],1) & [lastname]) & Left([idnumber],4)

我在 idnumber 字段的格式中有 0000,并设置为长整数和增量。

无论我怎么尝试,这都是我唯一能得到的结果:

Table:

idnumber = 0001
firstname = John
lastname = Doe
(calculated field) username = jdoe1

有人知道如何让用户名字段创建 jdoe0001 吗?

当源字符串至少包含该数量的字符时,

Left() 将为您提供您请求的字符数。但是当源字符串包含的字符少于请求的字符时,Left() 会为您提供源字符串。

这是即时 window 中的示例:

? Left("abcde", 4)
abcd
? Left("a", 4)
a

在您的例子中,您有一个带有格式的数字字段。因此,当字段包含 1 时,该值 显示为 0001。但是,实际存储的值只是 1,没有前导零。当您将字段的值赋给 Left() 时,它会对未格式化的数字进行操作 1:

idnumber = 1
? Left(idnumber, 4)
1
' which is equivalent to this ...
? Left(CStr(idnumber), 4)
1

因为你想要前导零,你可以将你的格式应用到 idnumber 当你将它提供给 Left():

? Left(Format(idnumber, "0000"), 4)
0001

但是同时使用 Left()Format() 似乎有点矫枉过正。如果 idnumber 永远不会包含超过 4 位数字,只需 Format() 即可满足您的需求:

? Format(idnumber, "0000")
0001

所以你原来的表达可以变成...

LCase(Left([firstname],1) & [lastname]) & Format(idnumber, "0000")

最后,确保 4 位数的要求是您永远想要的。长整数最多可以容纳 2,147,483,647.

该方法适用于查询中的计算字段。但是如果你想在table中定义一个计算字段,Format()是不可用的。在这种情况下,您可以连接 "0000"idnumber,并使用 Right() 来获取最后 4 个字符:

? Right("0000" & idnumber, 4)
0001