我正在尝试根据4位自动编号,名字的第一个字母和姓氏创建计算字段中的值以创建用户名。我打算创建像这样的用户名 - > flastname0001。
以下是我用于表达的内容: LCase(左([firstname],1)& [lastname])&左([IDNumber中],4)
我在idnumber字段的格式中有0000,并设置为长整数和增量。
无论我尝试过什么,这是我能得到的唯一结果:
表:
idnumber = 0001
firstname = John
lastname = Doe
(calculated field) username = jdoe1
任何人都知道如何使用户名字段创建jdoe0001?
答案 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