解析fullname列中的名字和姓氏

时间:2012-05-17 20:40:19

标签: sql parsing

以下是我试图操纵的数据。我想在第二个逗号之前得到姓氏和名字

enter image description here

这是我目前的代码:

SELECT     
[SDN_Name],         
CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN
    LEFT([SDN_Name],(CHARINDEX(', ',[SDN_Name],1)-1))    
ELSE         
     [SDN_Name]    
END as LName,
CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN  
   SUBSTRING([SDN_Name],CHARINDEX(', ',[SDN_Name])+1, ( LEN([SDN_Name]) - CHARINDEX(', ',[SDN_Name])+1))
ELSE         
    NULL     
END as FName 

FROM [分期]。[OFAC]。[TP1] 其中([SDN_Type] ='个人')

例如,如果全名是DELOS REYES,Feliciano,Jr。 我想要DELOS REYES作为LName 和Feliciano Semborio作为Fname 但我不想捕捉“,小。”

我能够解析第一个逗号的姓氏和所有内容。 如何编写一个CASEstatment,它将捕获没有名称后缀的名字?

1 个答案:

答案 0 :(得分:0)

这些是SDN_Name字段中的逗号,对吗?只需使用','而不是''的 CharIndex ,它应该可以使用。像这样:

SELECT [SDN_Name],         
    CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN
        LEFT([SDN_Name],CHARINDEX(', ',[SDN_Name])-1)     
    ELSE         
        [SDN_Name]    
    END as LName,
    CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN        
        SUBSTRING([SDN_Name], CHARINDEX(', ',[SDN_Name])+2, 
            CASE WHEN RIGHT([SDN_Name], 1) = '.' THEN LEN([SDN_Name]-2) ELSE LEN([SDN_Name]) END
            - (2+CHARINDEX(', ',[SDN_NAME],1))
        )
    ELSE         
        NULL     
    END as FName