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 endEl 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 GOEl 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 GOEl 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: