2010-09-27 3 views
2

Je suis chercher la façon la plus simple de diviser d'abord et Wile dernier nom parage le milieu initial. La disposition actuelle du champ est [Nom], [Prénom] [MI]. Aussi, l'initiale du milieu n'est pas toujours là. Mon code actuel est ci-dessous, je ne suis pas sûr de savoir comment couper l'initiale du prénom sans écrire une déclaration de cas.Comment découper l'initiale du milieu du nom complet d'une personne dans SQL?

SELECT SUBSTRING(h.Name, CHARINDEX(',', h.Name, 0) + 2, LEN(h.Name) - CHARINDEX(',', h.Name, 0)), 0 as FirstName 
    ,SUBSTRING(h.Name, 0, CHARINDEX(',', h.Name, 0)) as LastName 
FROM Members 
+5

Je pense qu'il est important de souligner: http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ indépendamment des décisions d'affaires. – jcolebrand

Répondre

4

J'ai fait quelques hypothèses ci-dessous:

1 - Les prénoms sont toujours plus d'un caractère.
2 - Moyen inital sera toujours précédée par un espace.
3 - Les données sont tronqués.

Ce code retourne NULL si l'un des ci-dessus ne sont pas vraies. Si vos données ne sont pas recadrée, vous pouvez utiliser RTRIM sur toutes les instances de @n ci-dessous pour atténuer.

declare @n as varchar(50) 
set @n = 'Smith, John A' 
select @n, 
    case 
     when SUBSTRING(@n, LEN(@n) - 1, 1) = ' ' 
     then SUBSTRING(@n, LEN(@n), 1) 
    end 
+0

Bon point sur la coupe la chaîne avant de travailler avec elle – jcolebrand

+0

Eh oui, vos hypothèses sont vraies et si je cherchais un moyen de contourner en utilisant l'instruction de cas cela fonctionne et je ne peux pas penser à une autre façon de le faire. Merci. – norlando

1

Quelles sont les règles métier de ce système? Sera-t-toujours:

last name,first nameespacea possible middle initial

Quelles autres permutations peuvent exister?

aura-t-il toujours espacelettre.? Parce que vous pouvez toujours prendre les trois caractères de droite, chercher un espace et une période, puis supprimer l'ensemble des trois.

-1
select REPLACE(firstName+ISNULL(middleName+' ','')+ISNULL(lastName +' ',''),' ',' ') as 'name' from Contacts 
Questions connexes