Ms access 如何将全名字段拆分为名字、姓氏和中间首字母?

Ms access 如何将全名字段拆分为名字、姓氏和中间首字母?,ms-access,vba,Ms Access,Vba,我有一个表,其中有一个名为PATRN NAME的字段,它是用名字、姓氏M.I. 示例: 史密斯,詹姆斯M 琼斯,克里斯J 温迪·安德森 如何将此字段拆分为名、姓和MI三个不同的字段?我尝试运行一个查询LAST\u NAME:[PATRN NAME]“&”,“,只获取姓氏,但没有得到任何结果。我没有顺便设计这个表,所以我意识到在没有单独字段名的情况下创建完整字段名是不明智的;我只是负责修复它。尝试以下方法: 姓氏:last\u name:Mid(PATRN\u name,1,InStr(PATRN

我有一个表,其中有一个名为
PATRN NAME
的字段,它是用
名字、姓氏M.I.

示例:

史密斯,詹姆斯M

琼斯,克里斯J

温迪·安德森

如何将此字段拆分为名、姓和MI三个不同的字段?我尝试运行一个查询
LAST\u NAME:[PATRN NAME]“&”,“
,只获取姓氏,但没有得到任何结果。我没有顺便设计这个表,所以我意识到在没有单独字段名的情况下创建完整字段名是不明智的;我只是负责修复它。

尝试以下方法:

姓氏:
last\u name:Mid(PATRN\u name,1,InStr(PATRN\u name,,)-1)

对于名字:
first\u name:Mid(零件名称,InStr(零件名称,,)+2)


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

考虑一下你是否可以随心所欲地改变

下面是一个即时窗口会话示例

PATRN_NAME=“史密斯,詹姆斯M” ?零件名称 史密斯,詹姆斯M ?拆分(零件名称“,”)(0) 史密斯 ?修剪(拆分(零件名称“,”)(1)) 詹姆斯M 拆分(拆分(拆分(零件名称),“”(1)),“”(0) 詹姆斯 拆分(修剪(拆分(零件名称),“”(1)),“”(1) M 您不能在查询中直接使用
Split()
。但是,您可以构建一个或多个用户定义函数,并从查询中调用UDF

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

我建议您澄清每次查询数据时,您的意图是提取
名字
姓氏
MI
,还是提取一次后将这些值单独存储在表中。这应该会影响您选择的方法。如果您将它们拆分一次并存储,您可以可以使用VBA过程而不是查询

还要决定中间首字母“Jones,Chris J.”后的可选圆点会出现什么情况。将其保留在
MI
中或丢弃它?

尝试以下方法:

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);

我尝试了所有这三个,但我得到了错误“无效点或!运算符或无效括号。“我尝试移动一些括号,但无法修复它。我只是尝试阅读有关拆分函数的内容,但我不太理解它,因此我很难理解您的代码。这种方法比在查询中键入条件容易吗?我只需要在这一次中创建三个新字段。在我拥有字段FIRST_NAME、LAST_NAME和MI之后,新数据将输入这些字段。我问起使用查询是因为我想我可以使用make table查询在一个新表中创建这3个新字段。我还想删除中间首字母的圆点。那么这听起来令人满意吗?--一种VBA程序,它读取每个
[PATRN NAME]
,分割出部分,丢弃点,并将部分存储在
名字
姓氏
MI
字段中。(这些字段是在同一个表中还是在另一个表中?)我在这里发布了一个后续问题: