【问题标题】:Parse out First Name, Last Name from SQL Server从 SQL Server 解析名字、姓氏
【发布时间】:2016-11-18 23:38:14
【问题描述】:

我想知道如何从全名中解析出名字和姓氏,同时考虑去掉中间名、Mr、Ms 和 JR 以及末尾的 JR。

Jon Doe Jr  First: Jon  Last: Doe  
Jon J Doe   First: Jon  Last: Doe  
Mr Jon Doe  First: Jon  Last: Doe

谢谢

【问题讨论】:

  • 您对名称的构成做了很多假设。不能保证一个名字只是FIRST<space>MIDDLE<space>LAST 许多姓氏包含几个词。据我所知,没有可靠的算法方法可以可靠地将全名解析为给定/姓氏。
  • 国际名称也可以有相反的顺序,这会使您混淆名字和姓氏。很尴尬。
  • 您以前的头衔现在也正式成为姓氏的一部分。你当然不想把它们去掉!

标签: sql-server


【解决方案1】:

先选择left(name, CHARINDEX(' ', name)), substring(name, CHARINDEX(' ', name)+1, len(name)-(CHARINDEX(' ', name)-1)) 作为最后 来自表名;

【讨论】:

  • 这可以帮助你
  • 关于如何使用 sql server 解析出名称的任何想法?
  • 使用上面的查询@Rachel
  • sql server 不支持 substring_index。
  • 你可以尝试在上面使用,如果不工作,请立即回复我,因为我整整两天都在活动@Rachel
【解决方案2】:

我发现了一个漂亮的函数,叫做 PARSE_NAME_UDF here

我在数据迁移和集成工作中不时使用这个功能:

以下是一些返回两列名字和姓氏的示例:

  SELECT 'First:' = dbo.PARSE_NAME_UDF('Jon Doe Jr', 'F'), 'Last:' = dbo.PARSE_NAME_UDF('Jon Doe Jr', 'L')
      UNION ALL SELECT 'First:' = dbo.PARSE_NAME_UDF('Jon J Doe', 'F'), 'Last:' = dbo.PARSE_NAME_UDF('Jon J Doe', 'L')
      UNION ALL SELECT 'First:' = dbo.PARSE_NAME_UDF('Jon Doe', 'F'), 'Last:' = dbo.PARSE_NAME_UDF('Jon Doe', 'L')

这里有更多例子:

  SELECT dbo.PARSE_NAME_UDF('Fred J Muggs Jr', 'F M L S') -- Returns Fred J Muggs Junior
  SELECT dbo.PARSE_NAME_UDF('Fred J Muggs Jr', 'F M L s') -- Returns Fred J Muggs Jr
  SELECT dbo.PARSE_NAME_UDF('Fred J Muggs Jr', 'f. M. L s') -- Returns F. J. Muggs Jr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2016-02-22
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多