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: