PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 25 → WX - Função SQL Slipt (Dividindo uma String)
WX - Função SQL Slipt (Dividindo uma String)
Started by BOLLER, Mar., 18 2017 12:24 PM - No answer
Registered member
3,651 messages
Popularité : +175 (223 votes)
Posted on March, 18 2017 - 12:24 PM
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 modified, March, 18 2017 - 12:24 PM