Usuário com melhor resposta
Trazer apenas a primeira letra do nome e sobrenome

Pergunta
-
Respostas
-
Segue uma outra forma de fazer , nativamente não tem porem podemos abstrair a logica em functios
1) criei uma function que faz Split dos valores
CREATE FUNCTION dbo.SplitValues ( @texto VARCHAR(200) , @delimiter NVARCHAR(5) ) RETURNS @Dados TABLE ( DATA VARCHAR(200) ) AS BEGIN DECLARE @valor VARCHAR(200) = LTRIM(RTRIM(@texto)); DECLARE @prefixos NVARCHAR(MAX) , @textXML XML; SELECT @prefixos = @valor; SELECT @textXML = CAST('<d>' + REPLACE(@prefixos, @delimiter, '</d><d>') + '</d>' AS XML); INSERT INTO @Dados SELECT X.DATA FROM ( SELECT T.split.value('.', 'nvarchar(max)') AS DATA FROM @textXML.nodes('/d') T ( SPLIT ) ) AS X; RETURN; END;
teste: SELECT * FROM dbo.SplitValues('JOSÉ FERREIRA DE SOUZA',' ')
apos criei uma função que recupera as iniciais
CREATE FUNCTION dbo.IniciaisNome ( @valor NVARCHAR(200),@separador NVARCHAR(5) ) RETURNS NVARCHAR(200) BEGIN DECLARE @Iniciais NVARCHAR(200) = ( SELECT COALESCE( (SELECT LEFT(SV.DATA, 1) + ' ' AS [text()] FROM dbo.SplitValues(@valor, @separador) AS SV FOR XML PATH('') ,TYPE).value('.[1]', 'VARCHAR(MAX)'), '') ); RETURN @Iniciais; END;
Agora e só executar a função
SELECT dbo.IniciaisNome('JOSÉ FERREIRA DE SOUZA',' ')
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
Wesley Neves
- Marcado como Resposta CHARLES.PTU sexta-feira, 30 de junho de 2017 19:15
Todas as Respostas
-
Bom dia,
Talvez exista outra alternativa melhor mas segue uma para teste:
DECLARE @TESTE TABLE (Id INT, Nome VARCHAR(50)); INSERT INTO @TESTE (Id, Nome) VALUES (10, 'JOSÉ FERREIRA DE SOUZA'); INSERT INTO @TESTE (Id, Nome) VALUES (20, 'MARIA DA SILVA'); with CTE_Split as ( SELECT f.Id, o.NomePartes FROM ( SELECT Id, cast('<X>' + replace(Nome, ' ', '</X><X>') + '</X>' as XML) as xmlfilter from @TESTE ) f CROSS APPLY ( SELECT fdata.D.value('.', 'varchar(50)') as NomePartes FROM f.xmlfilter.nodes('X') as fdata(D) ) o ) SELECT c.Id, (SELECT LEFT(s.NomePartes, 1) FROM CTE_Split as s WHERE s.Id = c.Id FOR XML PATH(''), TYPE).value('.', 'varchar(max)') FROM CTE_Split as c GROUP BY c.Id
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
-
Segue uma outra forma de fazer , nativamente não tem porem podemos abstrair a logica em functios
1) criei uma function que faz Split dos valores
CREATE FUNCTION dbo.SplitValues ( @texto VARCHAR(200) , @delimiter NVARCHAR(5) ) RETURNS @Dados TABLE ( DATA VARCHAR(200) ) AS BEGIN DECLARE @valor VARCHAR(200) = LTRIM(RTRIM(@texto)); DECLARE @prefixos NVARCHAR(MAX) , @textXML XML; SELECT @prefixos = @valor; SELECT @textXML = CAST('<d>' + REPLACE(@prefixos, @delimiter, '</d><d>') + '</d>' AS XML); INSERT INTO @Dados SELECT X.DATA FROM ( SELECT T.split.value('.', 'nvarchar(max)') AS DATA FROM @textXML.nodes('/d') T ( SPLIT ) ) AS X; RETURN; END;
teste: SELECT * FROM dbo.SplitValues('JOSÉ FERREIRA DE SOUZA',' ')
apos criei uma função que recupera as iniciais
CREATE FUNCTION dbo.IniciaisNome ( @valor NVARCHAR(200),@separador NVARCHAR(5) ) RETURNS NVARCHAR(200) BEGIN DECLARE @Iniciais NVARCHAR(200) = ( SELECT COALESCE( (SELECT LEFT(SV.DATA, 1) + ' ' AS [text()] FROM dbo.SplitValues(@valor, @separador) AS SV FOR XML PATH('') ,TYPE).value('.[1]', 'VARCHAR(MAX)'), '') ); RETURN @Iniciais; END;
Agora e só executar a função
SELECT dbo.IniciaisNome('JOSÉ FERREIRA DE SOUZA',' ')
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
Wesley Neves
- Editado Wesley Neves sexta-feira, 30 de junho de 2017 15:08 erro
-
Segue uma outra forma de fazer , nativamente não tem porem podemos abstrair a logica em functios
1) criei uma function que faz Split dos valores
CREATE FUNCTION dbo.SplitValues ( @texto VARCHAR(200) , @delimiter NVARCHAR(5) ) RETURNS @Dados TABLE ( DATA VARCHAR(200) ) AS BEGIN DECLARE @valor VARCHAR(200) = LTRIM(RTRIM(@texto)); DECLARE @prefixos NVARCHAR(MAX) , @textXML XML; SELECT @prefixos = @valor; SELECT @textXML = CAST('<d>' + REPLACE(@prefixos, @delimiter, '</d><d>') + '</d>' AS XML); INSERT INTO @Dados SELECT X.DATA FROM ( SELECT T.split.value('.', 'nvarchar(max)') AS DATA FROM @textXML.nodes('/d') T ( SPLIT ) ) AS X; RETURN; END;
teste: SELECT * FROM dbo.SplitValues('JOSÉ FERREIRA DE SOUZA',' ')
apos criei uma função que recupera as iniciais
CREATE FUNCTION dbo.IniciaisNome ( @valor NVARCHAR(200),@separador NVARCHAR(5) ) RETURNS NVARCHAR(200) BEGIN DECLARE @Iniciais NVARCHAR(200) = ( SELECT COALESCE( (SELECT LEFT(SV.DATA, 1) + ' ' AS [text()] FROM dbo.SplitValues(@valor, @separador) AS SV FOR XML PATH('') ,TYPE).value('.[1]', 'VARCHAR(MAX)'), '') ); RETURN @Iniciais; END;
Agora e só executar a função
SELECT dbo.IniciaisNome('JOSÉ FERREIRA DE SOUZA',' ')
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
Wesley Neves
- Marcado como Resposta CHARLES.PTU sexta-feira, 30 de junho de 2017 19:15
-
-
-
Vc pode fazer algo assim
SELECT TOP 23 P.NomeRazaoSocial iniciais = dbo.ufnRetornaSomenteInciaisDoNome(P.NomeRazaoSocial,' ') FROM Tabela AS P
Wesley Neves - Brasilia-DF
wesley.si.neves@gmail.com
MTA-SQL Server
MTA- Web Development
Analista Desenvolvedor.NET
Pós-Graduando em Banco de Dados
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
Wesley Neves