Ver Mensaje Individual
  #7 (permalink)  
Antiguo 20/10/2010, 15:20
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Reemplazar caracteres por sus respectivaas posiciones..

Buenas Tardes LUISESPOCH:

Lo que quieres no creo que lo puedas lograr con un simple select. Aquí te dejo una función que lo hace. Quizás puedas optimizarla, la verdad a estas horas del partido ya no carburo muy bien y fue lo primero que se me ocurrió jejeje.

Código SQL:
Ver original
  1. CREATE FUNCTION dbo.fn_dias
  2. (
  3.     @Cadena VARCHAR(100)
  4. )
  5. RETURNS VARCHAR(100)
  6. AS
  7. BEGIN
  8.     DECLARE @CadenaFinal VARCHAR(100)
  9.     SET @CadenaFinal = '' --Inicializa la Cadena Final
  10.     DECLARE @Posicion_inicial INT
  11.     SET @Posicion_inicial = 0
  12.     DECLARE @Posicion_final INT
  13.     SET @Posicion_final = CHARINDEX('S', @Cadena)
  14.     WHILE @Posicion_final > 1
  15.     BEGIN
  16.         --Copia el segmento desde la posición inicial hasta la posición en donde se encontró la S
  17.         SET @CadenaFinal = @CadenaFinal + SUBSTRING(@Cadena, @Posicion_inicial, @Posicion_final-@Posicion_inicial) + CAST(@Posicion_final AS VARCHAR)
  18.         --Elimina la primer S
  19.         SET @Cadena = SUBSTRING(@Cadena, 0, @Posicion_final) + 'N' + SUBSTRING(@Cadena, @Posicion_final+1, LEN(@Cadena))
  20.         --Mueve la posición inicial una posición después de la posición final
  21.         SET @Posicion_inicial = @Posicion_final+1
  22.         --Veridica si existe alguna otra S 
  23.         SET @Posicion_Final = CHARINDEX('S', @Cadena)
  24.     END
  25.     --Verifica si hay caracteres después de la última S para concatenarlos a la cadena
  26.     IF @Posicion_Inicial - 1 <= LEN(@Cadena)
  27.         SET @CadenaFinal = @CadenaFinal + SUBSTRING(@Cadena, @Posicion_Inicial, LEN(@Cadena))--Concatena el último tramo de la cadena
  28.     RETURN @CadenaFinal
  29. END
  30.  
  31. SELECT dbo.fn_dias('NNNNNSSNNNNNSSNNNNNSSNNNNNSS')



Saludos
Leo.