Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

sql pour séparer une chaîne d'un nom de personne et afficher les initiales

Cela devrait fonctionner pour les combinaisons "Firstname Lastname" et "Firstname Middlename 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

Bien sûr, si les utilisateurs disposent d'un espace dans l'un de leurs noms pour une raison quelconque, vous aurez un problème à analyser cela, mais je soupçonne que ce serait le cas de toute façon si vous ne stockez pas vos noms dans des champs séparés.