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

Como remplazar texto entre dos limitadores?

Estas en el tema de Como remplazar texto entre dos limitadores? en el foro de Mysql en Foros del Web. Hola a todos, Tengo un problemita y el cual es que no tengo muchos conocimientos en SQL y deseo extraer,eliminar o remplazar un determinado texto ...
  #1 (permalink)  
Antiguo 21/09/2012, 10:25
 
Fecha de Ingreso: agosto-2010
Ubicación: Madrid
Mensajes: 25
Antigüedad: 13 años, 8 meses
Puntos: 0
Como remplazar texto entre dos limitadores?

Hola a todos,

Tengo un problemita y el cual es que no tengo muchos conocimientos en SQL y deseo extraer,eliminar o remplazar un determinado texto de un campo llamado content.

El texto se encuentra entre dos limitadores, que en este caso son las "", ejemplo:

title="eliminarme"

Como verán quiero remplazar por un espacio vació ese "eliminarme", quedando como resultado:

title=""

Muchas gracias por sus respuestas

Un Saludo
  #2 (permalink)  
Antiguo 21/09/2012, 10:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Como remplazar texto entre dos limitadores?

lluriam19,
Yo lo haría más fácil de un golpe
UPDATE tutabla SET title = ""

eso borrará todo y añadirá sólo esas dos comillas, pero, ten cuidado, porque borrará todo lo que haya en ese campo title. Pero si te soy sincero no entiendo por qué quieres esas comillas. Yo no almacenaría esas comillas en la columna, pues si luego quiero añadirlas, lo hago en la consulta o con programación (esta solución es para mí la mejor en este caso).
  #3 (permalink)  
Antiguo 21/09/2012, 11:39
 
Fecha de Ingreso: agosto-2010
Ubicación: Madrid
Mensajes: 25
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Como remplazar texto entre dos limitadores?

Cita:
Iniciado por jurena Ver Mensaje
lluriam19,
Yo lo haría más fácil de un golpe
UPDATE tutabla SET title = ""

eso borrará todo y añadirá sólo esas dos comillas, pero, ten cuidado, porque borrará todo lo que haya en ese campo title. Pero si te soy sincero no entiendo por qué quieres esas comillas. Yo no almacenaría esas comillas en la columna, pues si luego quiero añadirlas, lo hago en la consulta o con programación (esta solución es para mí la mejor en este caso).
Hola,

Muchas gracias por tu respuesta, estaba apunto de modificar el tema hasta que vi tu comentario.

Lo primero es que quiero disculparme ya que llevo muchas horas buscando la forma de extraer el contenido de esas comillas motivo por el cual ahora estoy en el limbo, jeje, creo que me tomare un descanso.

Lo que quiero decir es que me falto agregar más información sobre mi problema ya que lo escribí como si ustedes conocieran ya mi problema:

Mi tabla tiene varios registros y campos, entre esos hay un campo llamado "content" el cual contiene una cierta cantidad de información, más específicamente de artículos, entonces dentro de todo ese texto del campo "content" hay códigos html de imágenes las cuales utilizan algunas el atributo "title" y quiero eliminarlo, pero como tengo pocos conocimientos en SQL entonces mi objetivo es hacerlo por pasos, primero llegar hasta el atributo title con alguna función de manejo de cadenas y eliminar lo que tiene entre sus comillas para después "eliminarlo" permanentemente.

Entonces esto es lo que tengo dentro del campo "content" de cada registro:

bla,bla,bla,bla..<img title="eliminarme" src="http://farm4.static.flickr.com/3585/3351507315_424389785f.jpg?v=0" width="194" height="113" />..bla,bla,bla

y esto es lo que quiero:

bla,bla,bla,bla..<img title="" src="http://farm4.static.flickr.com/3585/3351507315_424389785f.jpg?v=0" width="194" height="113" />..bla,bla,bla

Muchas gracias y una vez mas perdona si te cause alguna molestia.

Un Saludo
  #4 (permalink)  
Antiguo 21/09/2012, 12:00
Avatar de Alexis_Mejias  
Fecha de Ingreso: enero-2005
Ubicación: Santiago
Mensajes: 77
Antigüedad: 19 años, 3 meses
Puntos: 17
Respuesta: Como remplazar texto entre dos limitadores?

Usa el Replace

Código:
UPDATE Tabla SET Campo = Replace(Campo, "eliminarme", "")
Y con eso lo tienes solucionado
__________________
Alexis Mejias C.
Freelancer Chile - Si te sirvió puntúa positivo
Blog Personal
  #5 (permalink)  
Antiguo 21/09/2012, 12:24
 
Fecha de Ingreso: agosto-2010
Ubicación: Madrid
Mensajes: 25
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Como remplazar texto entre dos limitadores?

Cita:
Iniciado por Alexis_Mejias Ver Mensaje
Usa el Replace

Código:
UPDATE Tabla SET Campo = Replace(Campo, "eliminarme", "")
Y con eso lo tienes solucionado
Gracias por tu respuesta, y en caso que tuviera el contenido de los "titles" distintas descripciones?, habría alguna forma de sacar ese contenido con una sola sentencia?, por ejemplo:

Registro 1
bla,bla,bla,bla..<img title="eliminarme" src="http://farm4.static.flickr.com/3585/3351507315_424389785f.jpg?v=0" width="194" height="113" />..bla,bla,bla


Registro 2
bla,bla,bla,bla..<img title="patatas" src="http://farm4.static.flickr.com/3585/3351507315_424389785f.jpg?v=0" width="194" height="113" />..bla,bla,bla

Registro 3
bla,bla,bla,bla..<img title="cebollas" src="http://farm4.static.flickr.com/3585/3351507315_424389785f.jpg?v=0" width="194" height="113" />..bla,bla,bla
.
.
.
.
.
.
Registro 1
bla,bla,bla,bla..<img title="" src="http://farm4.static.flickr.com/3585/3351507315_424389785f.jpg?v=0" width="194" height="113" />..bla,bla,bla

Registro 2
bla,bla,bla,bla..<img title="" src="http://farm4.static.flickr.com/3585/3351507315_424389785f.jpg?v=0" width="194" height="113" />..bla,bla,bla

Registro 3
bla,bla,bla,bla..<img title="" src="http://farm4.static.flickr.com/3585/3351507315_424389785f.jpg?v=0" width="194" height="113" />..bla,bla,bla


Un Saludo

Última edición por lluriam19; 21/09/2012 a las 12:25 Razón: escribi mal un texto
  #6 (permalink)  
Antiguo 21/09/2012, 12:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Como remplazar texto entre dos limitadores?

Creo que es más complejo.
Pero primero tendrías que aclarar si sólo aparece una vez title="" en cada registro, y siempre lo hay. Si es así, podrías hacerlo cortando el texto antes de title="
y después de " src=
son varias consultas substring_index podrías hacerlo, pero esto suele resolverse con programación. Expresiones regulares con tu lenguaje de programación te permitirán hacerlo también...
Aclara primero
haz esta prueba
1) SELECT SUBSTRING_INDEX(campo, ' title="', 1)
2) SELECT SUBSTRING_INDEX(campo, ' " src=', 2)
3) podrías unir el substring_index de 1) con title="" src=

Y tendrías la cadena como quieres. Pero haz las consultas 1 y 2 y nos dices
  #7 (permalink)  
Antiguo 21/09/2012, 12:35
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Como remplazar texto entre dos limitadores?

Hola lluriam19:

Tal como lo dice jurena, si siempre tienes la misma estructura podría servir SUBSTRING_INDEX... a mi se me ocurrió una forma más "genérica", pero que igual es más complicada... Creo que solo es cuestion de "jugar" con las distintas funciones para cadena que tiene MySQL... checa este script:

Código:
mysql> SELECT
    -> content,
    -> CONCAT(
    -> SUBSTRING(content, 1, INSTR(content, 'title="') + 6),
    -> SUBSTRING(
    -> SUBSTRING(content, INSTR(content, 'title="') + 7, LENGTH(content)),
    -> INSTR(SUBSTRING(content, INSTR(content, 'title="') + 7,
    -> LENGTH(content)), '"'), LENGTH(content))) eliminado
    -> FROM tabla;
+----------------------------------------------------+-------------------------------------------+
| content                                            | eliminado                 |
+----------------------------------------------------+-------------------------------------------+
| <img title="eliminarme" src="farm4.static.com" />  | <img title="" src="farm4.static.com" />   |
| <img src="www.forosdelweb.com" title="otra cosa"/> | <img src="www.forosdelweb.com" title=""/> |
| title="lo que sea"                                 | title=""                 |
+----------------------------------------------------+-------------------------------------------+
3 rows in set (0.00 sec)
La expresión es larga, pero en realidad no es compleja... la idea es la misma que la que indica jurena, "recortar" dos subcadenas, una desde el inicio hasta la primer comilla de title=" y otra a partir de la primer comilla que encuentre después de title="... igual y no es la forma más eficiente de hacerlo, pero creo que te puede servir.

Saludos
Leo
  #8 (permalink)  
Antiguo 21/09/2012, 12:56
Avatar de Alexis_Mejias  
Fecha de Ingreso: enero-2005
Ubicación: Santiago
Mensajes: 77
Antigüedad: 19 años, 3 meses
Puntos: 17
Respuesta: Como remplazar texto entre dos limitadores?

Si les sirve

Esta en SQL pero es útil

Código:
select 'fffffffff <img title=''Juanito'' src=''''>' AS Campo  INTO #TMP
UNION  ALL
select 'ffff <img title=''PEPITO'' src=''''>' AS Campo
UNION ALL
select 'ssssss <img title=''PEDRITO'' src=''''>' AS Campo
UNION ALL
select '<img title=''PEDRITO'' src=''''>' AS Campo

SELECT Campo, 
	   REPLACE(Campo, 
                                         SUBSTRING(Campo, 
                                                            CHARINDEX('title=''', campo), 
                                                            CHARINDEX(''' src', campo) - CHARINDEX('title=''', campo)+1),  'title=''''') FROM #TMP

DROP TABLE #TMP
Saludos!
__________________
Alexis Mejias C.
Freelancer Chile - Si te sirvió puntúa positivo
Blog Personal
  #9 (permalink)  
Antiguo 22/09/2012, 04:41
 
Fecha de Ingreso: agosto-2010
Ubicación: Madrid
Mensajes: 25
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Como remplazar texto entre dos limitadores?

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola lluriam19:

Tal como lo dice jurena, si siempre tienes la misma estructura podría servir SUBSTRING_INDEX... a mi se me ocurrió una forma más "genérica", pero que igual es más complicada... Creo que solo es cuestion de "jugar" con las distintas funciones para cadena que tiene MySQL... checa este script:

Código:
mysql> SELECT
    -> content,
    -> CONCAT(
    -> SUBSTRING(content, 1, INSTR(content, 'title="') + 6),
    -> SUBSTRING(
    -> SUBSTRING(content, INSTR(content, 'title="') + 7, LENGTH(content)),
    -> INSTR(SUBSTRING(content, INSTR(content, 'title="') + 7,
    -> LENGTH(content)), '"'), LENGTH(content))) eliminado
    -> FROM tabla;
+----------------------------------------------------+-------------------------------------------+
| content                                            | eliminado                 |
+----------------------------------------------------+-------------------------------------------+
| <img title="eliminarme" src="farm4.static.com" />  | <img title="" src="farm4.static.com" />   |
| <img src="www.forosdelweb.com" title="otra cosa"/> | <img src="www.forosdelweb.com" title=""/> |
| title="lo que sea"                                 | title=""                 |
+----------------------------------------------------+-------------------------------------------+
3 rows in set (0.00 sec)
La expresión es larga, pero en realidad no es compleja... la idea es la misma que la que indica jurena, "recortar" dos subcadenas, una desde el inicio hasta la primer comilla de title=" y otra a partir de la primer comilla que encuentre después de title="... igual y no es la forma más eficiente de hacerlo, pero creo que te puede servir.

Saludos
Leo

Lo que dice jurena es cierto, no he aclarado la cantidad de titles que parece dentro del campo "content" de cada registro, por lo cual puedo decir que varían desde un title hasta 5 dentro del mismo campo en distintas posiciones, mas abajo muestro un ejemplo.

He aplicado la idea de jurena y la tuya leonardo_josue y obtengo casi el mismo resultado, el cual es que modifica el primer title del contenido pero si hay otros los deja intactos y pues el objetivo es que sean todos los titles del campo "content" de cada registro los que sean modificados.

Aquí les dejo el resultado que obtuve en el campo "content" de uno de los registros:
Código:
<img class="alignleft" title="" src="http://farm5.static.flickr.com/4036/5143881636_ec358cf6c2_m.jpg" alt=" - EVE " width="195" height="113" />Cuando la humanidad blabla blabla<p style="text-align: center;"><img class="alignnone" title=" - Eve " src="http://farm8.staticflickr.com/7045/7021552497_e4627d4b58.jpg" alt=" - Eve " width="500" height="313" /></p>
Ésta es la historia de EVE bla,bla,bla…….
<p style="text-align: center;"><img class="alignnone" title=" - Eve " src="http://farm8.staticflickr.com/7218/6875448752_dd61c68ec0.jpg" alt=" - Eve " width="500" height="313" /></p>
Antes de comenzar ..bla,bla,bla
Esta estructura la contiene el campo "content" en casi todos los registros.

Un Saludo
  #10 (permalink)  
Antiguo 22/09/2012, 04:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Como remplazar texto entre dos limitadores?

pide ayuda en el lenguaje de programación con el que trabajes sobre reemplazos mediante expresiones regulares con una o varias sustituciones, verás que hay funciones en tu programa que te permitirán hacerlo, haya uno o varios title dentro de la cadena...
Tal vez con procedimientos almacenados podrías hacerlo, pero ahí yo no puedo orientarte.

Etiquetas: cadenas, limitadores, remplazar, sql
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




La zona horaria es GMT -6. Ahora son las 23:34.