Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/05/2011, 16:14
mikexloo
 
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 13 años
Puntos: 1
Respuesta: Reemplazar o borrar un "str" de un "str_list"

Gracias tio, habia pensado que tenia que hacer algo como esto pero no creo que hubiera llegado a descubrirlo tan pronto como tu, seguiré trabajando tambien por si encuentro un metodo mas corto, aun estoy intentando entender que hace el 2 y el -2 pero para mañana seguro que lo entiendo

Muchas gracias

Pdta. Por favor no es necesario que respondas sin comer XD

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola mikexloo:

A estas horas de la tarde (4:30 pm en México) y con el estómago vacío no se me ocurren muchas cosas, pero prueba con esto;

Código MySQL:
Ver original
  1. mysql> create table tabla_find (texto varchar(50));
  2. Query OK, 0 rows affected (0.11 sec)
  3.  
  4. mysql> insert into tabla_find values ('4,6,1,9,18'), ('1,11,111,11111,100001'),
  5. ('21,31,41,51');
  6. Query OK, 3 rows affected (0.05 sec)
  7. Records: 3  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select * from tabla_find;
  10. +-----------------------+
  11. | texto                 |
  12. +-----------------------+
  13. | 4,6,1,9,18            |
  14. | 1,11,111,11111,100001 |
  15. | 21,31,41,51           |
  16. +-----------------------+
  17. 3 rows in set (0.00 sec)
  18.  
  19. mysql> update tabla_find set texto = substr(replace(concat(',', texto, ','), ',1
  20. ,', ','), 2, length(replace(concat(',', texto, ','), ',1,', ',')) - 2);
  21. Query OK, 2 rows affected (0.03 sec)
  22. Rows matched: 3  Changed: 2  Warnings: 0
  23.  
  24. mysql> select * from tabla_find;
  25. +---------------------+
  26. | texto               |
  27. +---------------------+
  28. | 4,6,9,18            |
  29. | 11,111,11111,100001 |
  30. | 21,31,41,51         |
  31. +---------------------+
  32. 3 rows in set (0.00 sec)

En el ejemplo estoy eliminando los 1's, para eliminar algún otro elemento lo único que tendrías que cambiar es esta intrucción:

Código:
replace(concat(',', texto, ','), ',1,', ',')
la idea que se me ocurrió es concatenar una coma al inicio y fin de la cadena y buscar justamente el elemento entre comas (,1,) y sustituirlo por una (,). Al final con el substring "recortas" la cadena para eliminar las comas del inicio y fin de la cadena. Seguramente hay alguna otra forma de hacer esto mismo, optimizando código, pero de primera es lo único que se me ocurre. Si encuentro alguna otra solución mañana la posteo.

Saludos
Leo.