quinta-feira, 20 de agosto de 2009

Separar Nome e Sobrenome

Este código eu peguei do blog do MVP Gustavo Maia Aguiar, que você deve visitar obrigatoriamente!!!


Ele transfoma a string em XML para poder utilizar os comandos XQuery.

No NomeXML.query você nota a $nome/n[1]/text() que pega a primeira parte de nome e o $nome/n[last()]/text() que pega somente a última. Essa solução eu vou usar mais para frente para fazer um "Split" de uma string no SQLServer.


CREATE TABLE #Nomes (Nome VARCHAR(80))
-- Inserção de registros
INSERT INTO #Nomes VALUES ('Joana Maria')

INSERT INTO #Nomes VALUES ('Ana Paula Silveira')
INSERT INTO #Nomes VALUES ('Pedro Paulo Almeida')
INSERT INTO #Nomes VALUES ('Carlos Eduardo da Silva')
INSERT INTO #Nomes VALUES ('Rodrigo Diógenes Cunha Meira')
INSERT INTO #Nomes VALUES ('Maria')


;WITH NomesF (Nome, NomeXML) AS
( SELECT Nome, CAST('' + REPLACE(Nome,' ','') + '' AS XML) FROM #Nomes)
SELECT Nome,
CAST(NomeXML.query('for $nome in /N return $nome/n[1]/text()') AS VARCHAR(80)) As PrimeiroNome,
CAST(NomeXML.query('for $nome in /N return $nome/n[last()]/text()') AS VARCHAR(80)) As SobreNome,
CAST(NomeXML.query('for $nome in /N return concat($nome/n[1],'' '',$nome/n[last()])') AS VARCHAR(80)) As NomeAbreviado,
LEFT(Nome, Case When CHARINDEX(' ',Nome) = 0 Then Len(Nome) Else CHARINDEX(' ',Nome) -1 End) as UsingReverse1,
RIGHT(Nome, Case When CHARINDEX(' ',REVERSE(Nome)) = 0 Then 0 Else CHARINDEX(' ',REVERSE(Nome))-1 end) as UsingReverse2
FROM NomesF


Nenhum comentário:

Postar um comentário