T-SQL substring - separating first and last name

前端 未结 11 1764
南方客
南方客 2020-11-30 05:50

I have a column which has FirstName and LastName together. I\'m writing a report to separate the FirstName And LastName. How do I get the FirstName and LastName separated in

11条回答
  •  醉酒成梦
    2020-11-30 06:00

    Here is a more elaborated solution with a SQL function:

    GetFirstname

    CREATE FUNCTION [dbo].[ufn_GetFirstName]  
    (  
     @FullName varchar(500)  
    )  
    RETURNS varchar(500)  
    AS  
    BEGIN  
     -- Declare the return variable here  
     DECLARE @RetName varchar(500)  
    
     SET @FullName = replace( replace( replace( replace( @FullName, '.', '' ), 'Mrs', '' ), 'Ms', '' ), 'Mr', '' )  
    
     SELECT   
      @RetName =   
        CASE WHEN charindex( ' ', ltrim( rtrim( @FullName ) ) ) > 0 THEN left( ltrim( rtrim( @FullName ) ), charindex( ' ', ltrim( rtrim( @FullName  ) ) ) - 1 ) ELSE '' END  
    
     RETURN @RetName  
    END
    

    GetLastName

    CREATE FUNCTION [dbo].[ufn_GetLastName]  
    (  
     @FullName varchar(500)  
    )  
    RETURNS varchar(500)  
    AS  
    BEGIN  
     DECLARE @RetName varchar(500)  
    
     IF(right(ltrim(rtrim(@FullName)), 2) <> ' I')  
     BEGIN  
      set @RetName = left(   
       CASE WHEN   
        charindex( ' ', reverse( ltrim( rtrim(   
        replace( replace( replace( replace( replace( replace( @FullName, ' Jr', '' ), ' III', '' ), ' II', '' ), ' Jr.', '' ), ' Sr', ''), 'Sr.', '')  
        ) ) ) ) > 0   
       THEN   
        right( ltrim( rtrim(   
        replace( replace( replace( replace( replace( replace( @FullName, ' Jr', '' ), ' III', '' ), ' II', '' ), ' Jr.', '' ), ' Sr', ''), 'Sr.', '')  
        ) ) , charindex( ' ', reverse( ltrim( rtrim(   
        replace( replace( replace( replace( replace( replace( @FullName, ' Jr', '' ), ' III', '' ), ' II', '' ), ' Jr.', '' ), ' Sr', ''), 'Sr.', '')  
        ) ) )  ) - 1 )   
       ELSE '' END  
      , 25 )  
     END  
     ELSE  
     BEGIN  
      SET @RetName = left(   
       CASE WHEN   
        charindex( ' ', reverse( ltrim( rtrim(   
        replace( replace( replace( replace( replace( replace( replace( @FullName, ' Jr', '' ), ' III', '' ), ' II', '' ), ' I', '' ), ' Jr.', '' ), ' Sr', ''), 'Sr.', '')  
        ) ) ) ) > 0   
       THEN   
        right( ltrim( rtrim(   
        replace( replace( replace( replace( replace( replace( replace( @FullName, ' Jr', '' ), ' III', '' ), ' II', '' ), ' I', '' ), ' Jr.', '' ), ' Sr', ''), 'Sr.', '')  
        ) ) , charindex( ' ', reverse( ltrim( rtrim(   
        replace( replace( replace( replace( replace( replace( replace( @FullName, ' Jr', '' ), ' III', '' ), ' II', '' ), ' I', '' ), ' Jr.', '' ), ' Sr', ''), 'Sr.', '')  
        ) ) )  ) - 1 )   
       ELSE '' END  
      , 25 )  
     END  
    
     RETURN @RetName  
    END
    

    USE:

    SELECT dbo.ufn_GetFirstName(Fullname) as FirstName, dbo.ufn_GetLastName(Fullname) as LastName FROM #Names
    

提交回复
热议问题