3

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

例子:

史密斯,詹姆斯 M

琼斯,克里斯·J。

安德森,温迪升

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

4

3 回答 3

6

考虑是否可以根据自己的意愿弯曲拆分功能

这是一个立即窗口会话示例。

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_NAME和,还是在提取一次后将这些值单独存储在表中。MI这应该会影响您选择的方法。如果您将它们拆分一次并存储,您可以使用 VBA 过程而不是查询。

还要决定中间首字母“Jones, Chris J”之后的可选点应该发生什么。. 保留MI还是丢弃?

于 2013-08-07T15:36:50.660 回答
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);
于 2014-05-15T21:10:26.337 回答
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)

于 2013-08-07T15:33:36.753 回答