【问题标题】:How to split Full Name field into First Name, Last Name and Middle Initial?如何将全名字段拆分为名字、姓氏和中间名首字母?
【发布时间】:2014-05-16 05:28:20
【问题描述】:

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

例子:

史密斯,詹姆斯 M

琼斯,克里斯·J。

安德森,温迪 L

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

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    考虑您是否可以根据自己的意愿弯曲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 中还是丢弃?

    【讨论】:

    • 我刚刚尝试阅读有关拆分功能的信息,但我不太了解它,因此我很难理解您的代码。这种方法比在查询中输入条件更容易吗?
    • 这一次我只需要创建三个新字段。在我拥有字段 FIRST_NAME、LAST_NAME 和 MI 之后,新数据将被输入到这些字段中。我询问了有关使用查询的问题,因为我认为我可以使用生成表查询在新表中生成这 3 个新字段。
    • 我也想去掉中间首字母的点。
    • 那么这听起来令人满意吗? --- 一个 VBA 过程,它读取每个 [PATRN NAME],拆分部分,丢弃点,并将部分存储在 FIRST_NAMELAST_NAMEMI 字段中。 (这些字段是在同一个表中还是在不同的表中?)
    • 我在这里发布了一个后续问题:stackoverflow.com/questions/18111169/…
    【解决方案2】:

    试试这个:

    姓氏: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)

    【讨论】:

    • 我尝试了所有这 3 个,但我收到错误“无效的点或!运算符或无效的括号。”我尝试移动一些括号,但无法修复。
    【解决方案3】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      相关资源
      最近更新 更多