在字段中拆分姓氏和后缀

时间:2011-05-12 14:01:59

标签: sql sql-server

我有一个包含后缀的姓氏字段,我需要将字段拆分为姓氏字段和后缀字段。我已经尝试了charindex,但我的语法很难。数据样本如下:

Miller 
Wilson Jr
Hearne Sr
Horner III
Bond jr
Jones-Alexander
Brown ii
Rodriguez Maldonado
Appleby

我试图在SQL Server中找到一个可靠的select语句,将这些数据拉到另一个表中,并将姓氏和后缀分开。

感谢您的帮助。

修改其他信息已发布为答案

  

如果没有后缀,我想得到   LastName字段的姓氏,   并将后缀保留为Null。

     

幸运的是,没有名字   或者这个领域的标题,所以我不会   不得不担心那些,只是   II,III,IV,Jr,Sr,两部分最后   名称,

2 个答案:

答案 0 :(得分:2)

您应该能够使用CASE语句检查您在数据中看到的名称是否存在。

CASE WHEN POSITION(' Jr' IN LastName) > 0 
     THEN SUBSTRING(LastName FROM POSITION(' Jr' IN LastName) FOR 2)
     WHEN POSITION(' III' IN LastName) > 0
     ....
END

它肯定不会抓住所有东西,你可能不得不不断调整它。您的另一个选择是引入一个数据质量工具,该工具可以使用给定名称和姓氏的已知列表以及足够和标题来解析名称数据。不要忘记您可能会遇到John M. Smith III, MD。你打算如何处理?

答案 1 :(得分:0)

感谢您的帮助。我最终使用Case Statement来获得我需要的东西。它似乎有点粗糙,但看起来它对我所需要的可靠:

CASE
  WHEN (mytable.L_NAME like '% Jr') Then SUBSTRING(mytable.L_NAME, 1,CHARINDEX(' ', mytable.L_NAME) - 1)
  WHEN (mytable.L_NAME like '% Sr') Then SUBSTRING(mytable.L_NAME, 1,CHARINDEX(' ', mytable.L_NAME) - 1)
  WHEN (mytable.L_NAME like '% II') Then SUBSTRING(mytable.L_NAME, 1,CHARINDEX(' ', mytable.L_NAME) - 1)
  WHEN (mytable.L_NAME like '% III') Then SUBSTRING(mytable.L_NAME, 1,CHARINDEX(' ', mytable.L_NAME) - 1)
  WHEN (mytable.L_NAME like '% IV') Then SUBSTRING(mytable.L_NAME, 1,CHARINDEX(' ', mytable.L_NAME) - 1)
  WHEN (mytable.L_NAME like '% V') Then SUBSTRING(mytable.L_NAME, 1,CHARINDEX(' ', mytable.L_NAME) - 1)
  WHEN (mytable.L_NAME like '% VI') Then SUBSTRING(mytable.L_NAME, 1,CHARINDEX(' ', mytable.L_NAME) - 1)
  ELSE mytable.L_NAME
END
AS LastName,

CASE
  WHEN (mytable.L_NAME like '% Jr') Then 'Jr'
  WHEN (mytable.L_NAME like '% Sr') Then 'Sr'
  WHEN (mytable.L_NAME like '% II') Then 'II'
  WHEN (mytable.L_NAME like '% III') Then 'III'
  WHEN (mytable.L_NAME like '% IV') Then 'IV'
  WHEN (mytable.L_NAME like '% V') Then 'V'
  WHEN (mytable.L_NAME like '% VI') Then 'VI'
  ELSE NULL
END
AS Suffix,