sql >> Base de Datos >  >> RDS >> Sqlserver

sql para separar una cadena del nombre de una persona y generar las iniciales

Esto debería funcionar para las combinaciones "Firstname Lastname" y "Firstname Secondname Lastname".

DECLARE @name AS NVARCHAR(50) 
SET @name = 'Firstname Middle Lastname' 


SELECT SUBSTRING(@name, 1, 1) +     --First initial
    SUBSTRING(@name, CHARINDEX(' ', @name) + 1, 1) +    --Middle/Last initial
    CASE WHEN 0 <>  CHARINDEX(' ', @name, CHARINDEX(' ', @name) + 1) -- More than two words 
        THEN SUBSTRING(@name, CHARINDEX(' ', @name, CHARINDEX(' ', @name) + 1) + 1, 1)  --Last initial
    ELSE '' --Have to add empty string to avoid NULLing entire result
    END

Por supuesto, si los usuarios tienen un espacio en uno de sus nombres, por alguna razón, tendrá problemas para analizarlo, pero sospecho que ese sería el caso de todos modos cuando no almacene sus nombres en campos separados.