如何将全名字段拆分为名字,姓氏和中间名?

时间:2013-08-07 15:20:21

标签: vba ms-access access-vba

我有一个名为PATRN NAME的字段的表格,其中设置了First_Name, Last_Name M.I.

示例:

  

史密斯,詹姆斯M

     

琼斯,克里斯J。

     

Anderson,Wendy L

如何将此字段拆分为3个名为FIRST_NAME,LAST_NAME和MI的字段?我尝试运行查询LAST_NAME: [PATRN NAME]" & ", "来获取姓氏,但没有得到任何结果。我没有设计这个表,所以我意识到在没有单独的字段名称的情况下创建一个完整的字段名称并不聪明;我只是负责修理它。

3 个答案:

答案 0 :(得分:6)

考虑是否可以根据自己的意愿弯曲Split Function

以下是立即窗口会话示例。

PATRN_NAME = "Smith, James M"
? PATRN_NAME
Smith, James M
? Split(PATRN_NAME, ",")(0)
Smith
? Trim(Split(PATRN_NAME, ",")(1))
James M
? Split(Trim(Split(PATRN_NAME, ",")(1)), " ")(0)
James
? Split(Trim(Split(PATRN_NAME, ",")(1)), " ")(1)
M

您无法直接在查询中使用Split()。但是,您可以构建一个或多个用户定义的函数,并从查询中调用UDF。

这种方法可以使查询更简单,而不是需要组合其他函数的查询:InStr()Mid()Right()等。但是,UDF意味着查询只能在Access应用程序会话中工作;如果您需要从Access外部运行的查询(.Net,VBScript,PHP等),则UDF将不可用。

我建议您澄清一下,每次查询数据时是否要提取FIRST_NAMELAST_NAMEMI,或者是否将这些值分别存储在表中你提取一次。这应该影响你选择的方法。如果您将它们拆分一次并存储,则可以使用VBA过程而不是查询。

还要确定在中间首字母后的可选点会发生什么," Jones,Chris J。" 。保留在MI或丢弃它?

答案 1 :(得分:0)

试试这个:

姓氏:LAST_NAME: Mid(PATRN_NAME,1,InStr(PATRN_NAME,',')-1)

名字:FIRST_NAME: Mid(PATRN_NAME,InStr(PATRN_NAME,',')+2)

对于MI:MI: Mid(Mid(PATRN_NAME,InStr(PATRN_NAME,',')+2),InStr(Mid(PATRN_NAME,InStr(PATRN_NAME,',')+2),' '),3)

答案 2 :(得分:0)

试试这个:

UPDATE Tbl_Master_Working SET Tbl_Master_Working.[Last Name] = Mid([NAME],1,InStr([NAME],',')-1), Tbl_Master_Working.[First Name] = Mid([NAME],InStr([NAME],',')+2);