Prezados,
Me deparei com um problema onde eu queria pegar no sql apenas as iniciais de um nome, para isso criei a função split
dbo.Split(Logradouro, 'busca', posicao)
A split pega do campo a ocorrência podendo ser ; ou espaço ou | ou , ou um caracter especifico que desejar.
Pode ser usada para uma carga .CSV ou apenas para pegar partes de uma string.
Para criar a função SPLIT (Dividindo uma String):
USE [Model]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Split] ( @String varchar(8000), @Separador varchar(8000), @PosBusca int )
RETURNS varchar(8000)
AS BEGIN
DECLARE @Index int, @Max int, @Retorno varchar(8000)
DECLARE @Partes as TABLE ( Id_Parte int identity(1,1), Texto varchar(8000) )
SET @Index = charIndex(@Separador,@String)
WHILE (@Index > 0) BEGIN
INSERT INTO @Partes SELECT SubString(@String,1,@Index-1)
SET @String = Rtrim(Ltrim(SubString(@String,@Index+Len(@Separador),Len(@String))))
SET @Index = charIndex(@Separador,@String)
END
IF (@String != '') INSERT INTO @Partes SELECT @String
SELECT @Max = Count(*) FROM @Partes
IF (@PosBusca = 0) SET @Retorno = Cast(@Max as varchar(5))
IF (@PosBusca < 0) SET @PosBusca = @Max + 1 + @PosBusca
IF (@PosBusca > 0) SELECT @Retorno = Texto FROM @Partes WHERE Id_Parte = @PosBusca
RETURN RTRIM(LTRIM(@Retorno))
END
Modo de usar, exemplo:
select top 100 dbo.Split(Logradouro, ' ',1), dbo.Split(Logradouro, ' ',2), dbo.Split(Logradouro, ' ',3), dbo.Split(Logradouro, ' ',4), dbo.Split(Logradouro, ' ',5), * from enderecoscorreios
Com isso pego de um endereço as iniciais, exemplo:
Endereço: Rua Julia Amazonas
A função SQL acima vai retornar:
R J A
Bons estudos!!!
--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/Message modifié, 18 mars 2017 - 12:24