计算字段将多个字段合并为一个

时间:2015-03-21 15:05:06

标签: ms-access ms-access-2013 calculated-field

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

以下是我用于表达的内容: LCase(左([firstname],1)& [lastname])&左([IDNumber中],4)

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

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

表:

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

任何人都知道如何使用户名字段创建jdoe0001?

1 个答案:

答案 0 :(得分:3)

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

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

以下是立即窗口中的示例:

? 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

由于您需要前导零,因此当您将格式提供给Left()时,可以将格式应用于 idnumber

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

但同时使用Left()Format()似乎有点矫枉过正。如果 idnumber 永远不会包含超过4位数字,那么Format()只会为您提供所需内容:

? Format(idnumber, "0000")
0001

所以你的原始表达可能会......

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

最后,确保4位数的要求是您一直想要的。 Long Integer可以容纳最多 2,147,483,647 的数字。

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

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