-1

以下は、私が操作しようとしているデータです。2番目のコンマの前に姓と名を取得しようとしています

ここに画像の説明を入力

これは私が現在持っているコードです:

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] Where ([SDN_Type] = 'individual')

たとえば、フルネームが DELOS REYES, Feliciano , Jr. の場合、LName として DELOS REYES を、Fname として Feliciano Semborio を使用したいのですが、「, Jr.」をキャプチャしたくありません。

姓と最初のコンマのすべてを解析できます。名前のサフィックスなしで名を取得する CASE ステートメントを作成するにはどうすればよいですか?

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 に答える