martes, 24 de marzo de 2015

Funciones en SQL para obtener la posicion, ocurrencias de una subcadena dentro de una cadena

Posted by InfoTacticas Soluciones  |  No comments

A continuación les comparto algunas funciones últiles en SQL Server 2008 / 2008R2 para manipular cadena de caracteres. Espero les sirva.

Obtener la última posición de una subcadena

--
--
create function fnr_ireObtenerUltimaPosicionSubCadena(@cadenaBuscar varChar(max),@caracter varchar(1))
returns int
as
begin
        return len(@cadenaBuscar) - charindex(@caracter, reverse(@cadenaBuscar)) +1
end
El resultado de la siguiente prueba es que la subcadena 'NA' está presente por última vez en la posición 28 de la cadena.
--
--
select dbo.fnr_ireObtenerUltimaPosicionSubCadena('TRUJILLO CAPITAL INTERNACIONAL DE LA PRIMAVERA', 'NA')
Obtener el número de ocurrencias de una subcadena
create FUNCTION [dbo].[fnr_ireObtenerNumeroOcurrencias](
@Cadena varchar(1000), 
@CadenaABuscar varchar(100)
) 
RETURNS int 
as
BEGIN 
    DECLARE @pos int, @contador int, @res int
 
    set @pos = 0
    set @contador = 0
    set @res = 1 
    
    WHILE (@res > 0)
    BEGIN
       select @res = CHARINDEX(@CadenaABuscar, @Cadena, @pos + 1)
       if @res > 0
       BEGIN
          set @contador = @contador + 1
          set @pos = @res
       END
    END    
    RETURN(@contador) 
END
GO

El resultado de la siguiente prueba es que la subcadena 'EL' está presente 3 veces en la cadena.
--
--
select dbo.[fnr_ireObtenerNumeroOcurrencias]('EL PERRO, EL GATO, EL PUMA, LOS RATONES', 'EL')

Obtener la Ocurrencia N-ésima de una subcadena
--
--
create FUNCTION [dbo].[fnr_ireObtenerPosicionN_Ocurrencia]
(@Cadena varchar(1000), 
@CadenaABuscar varchar(100), 
@Ocurrencia int
) 
RETURNS int 
as
BEGIN 
    DECLARE @pos int, @contador int, @res int
 
    set @pos = CHARINDEX(@CadenaABuscar, @Cadena, 1)
    set @contador = 2
 
    IF @Ocurrencia = 1 
 set @res = @pos 
    ELSE
    BEGIN 
 WHILE (@contador <= @Ocurrencia)
        BEGIN 
     select @res = CHARINDEX(@CadenaABuscar, @Cadena, @pos + 1)
            set @contador = @contador + 1
            set @pos = @res 
        END
    END 
    RETURN(@res) 
END
GO

El resultado de la siguiente prueba es que la la segunda ocurrencia de la subcadena ' ' está en la posición 15 en la cadena
--
--
SELECT dbo.[fnr_ireObtenerPosicionN_Ocurrencia]('VARGAS ROSALES ALFREDO', ' ', 2)

3/24/2015 08:20:00 a. m. Share:

0 comentarios:

Get updates in your email box
Complete the form below, and we'll send you the best coupons.

Deliver via FeedBurner
back to top