-1

下面是我试图操纵的数据。我正在尝试在第二个逗号之前获取姓氏和名字

在此处输入图像描述

这是我目前拥有的代码:

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 [Staging].[OFAC].[TP1] 其中([SDN_Type] = '个人')

例如,如果全名是 DELOS REYES, Feliciano, Jr。我希望 DELOS REYES 作为 LName,Feliciano Semborio 作为 Fname,但我不想捕获“, Jr.”。

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

4

1 回答 1

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 
于 2012-05-17T20:45:33.900 回答