Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Reemplazar caracteres por sus respectivaas posiciones..

Estas en el tema de Reemplazar caracteres por sus respectivaas posiciones.. en el foro de SQL Server en Foros del Web. Cómo se podría reemplazar ciertos caracteres por las posiciones en las que se encuentran estos caracteres dentro de una cadena? Por ejemplo: Tengo una cadena ...
  #1 (permalink)  
Antiguo 18/10/2010, 15:29
Avatar de LUISESPOCH  
Fecha de Ingreso: octubre-2006
Mensajes: 194
Antigüedad: 18 años, 1 mes
Puntos: 0
Reemplazar caracteres por sus respectivaas posiciones..

Cómo se podría reemplazar ciertos caracteres por las posiciones en las que
se encuentran estos caracteres dentro de una cadena?

Por ejemplo:

Tengo una cadena que representan los días de un mes
NNNNNSSNNNNNSSNNNNNSSNNNNNSS, las "S" representan los días de feriados
y quisiera poder obtener estas posiciones y guardarlos en una tabla aparte (esto se concatenará con el año-mes que tengo en la consulta)


Alguno me podría por favor orientar un poco sobre este meollo en sql server? :)


Gracias a todos

PD: Tengo sqlserver2005

LE
  #2 (permalink)  
Antiguo 18/10/2010, 15:38
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
Respuesta: Reemplazar caracteres por sus respectivaas posiciones..

Primero hablas de reemplazar luego de obtener, son 2 acciones diferentes, la primera lo haces con REPLACE, la segunda con SUBSTRING.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 19/10/2010, 13:07
Avatar de LUISESPOCH  
Fecha de Ingreso: octubre-2006
Mensajes: 194
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Reemplazar caracteres por sus respectivaas posiciones..

Si flaviovich, lo que busco es por ponerles un ejemplo..

Si tengo esta cadena:
NNNNNSSNNNNNSSNNNNNSSNNNNNSS
NNNNN67NNNNN1314NNNNN2021NNNNN2728

estos valores numericos al final deben estar guardados en una tabla..

El reemplaso de las posiciones de cada "S" es lo que quisiera que porfa me eches una manito..

LE
  #4 (permalink)  
Antiguo 19/10/2010, 13:49
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
Respuesta: Reemplazar caracteres por sus respectivaas posiciones..

Los números como vienen? están en una tabla? vienen uno a uno?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 20/10/2010, 11:20
Avatar de LUISESPOCH  
Fecha de Ingreso: octubre-2006
Mensajes: 194
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Reemplazar caracteres por sus respectivaas posiciones..

Ese es el punto, los valores numericos que corresponden a las posiciones aun no logro obtenerlas,...estas posiciones las iría desglozando para formarle un string de la forma de una fecha y guardar en otra tabla...
  #6 (permalink)  
Antiguo 20/10/2010, 11:39
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
Respuesta: Reemplazar caracteres por sus respectivaas posiciones..

Podrías concatenar los caracteres delante de cada numero, y así recursivamente hasta que el ultimo numero.
Si no es lo que necesitas, explica de otra forma.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 20/10/2010, 15:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 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.

Etiquetas: caracteres, posiciones, reemplazar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:47.