PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → WX - Função SQL Slipt (Dividindo uma String)
WX - Função SQL Slipt (Dividindo uma String)
Débuté par BOLLER, 18 mar. 2017 12:24 - Aucune réponse
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 18 mars 2017 - 12:24
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
/****** Object: UserDefinedFunction [dbo].[Split] Script Date: 17/03/2017 18:29:01 ******/
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!!!

:merci:

--
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