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

problema replace

Estas en el tema de problema replace en el foro de Mysql en Foros del Web. tengo un problema tengo que hacer un replace a varios datos de una columna el problema es que no se como hacerlo pues solo necesito ...
  #1 (permalink)  
Antiguo 12/11/2013, 06:52
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 2 meses
Puntos: 0
Pregunta problema replace

tengo un problema tengo que hacer un replace a varios datos de una columna el problema es que no se como hacerlo pues solo necesito cambiar una parte de la palabra y otra no tocarla, osea tener palabras reservadas, las cuales serían zona, eficaz y cobranza.

en todos los caso se requiere borrar solo la letra "z" ej:

tengo zonazsur, debería quedar como zonasur

tengo cobranzazzeliminar, debería quedar como cobranzaeliminar.

esto no se como hacerlo espero me puedan ayudar.

Saludos.
  #2 (permalink)  
Antiguo 12/11/2013, 07:42
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: problema replace

Esto, es una animalada horrible y bestial. Quizás funcione.

Código MySQL:
Ver original
  1. UPDATE tabla SET campo=REPLACE(campo,'zb','b');
  2. UPDATE tabla SET campo=REPLACE(campo,'zc','c');
  3. UPDATE tabla SET campo=REPLACE(campo,'zd','d');
  4. UPDATE tabla SET campo=REPLACE(campo,'zf','f');
  5. UPDATE tabla SET campo=REPLACE(campo,'zg','g');
  6. UPDATE tabla SET campo=REPLACE(campo,'zh','h');
  7. UPDATE tabla SET campo=REPLACE(campo,'zj','j');
  8. UPDATE tabla SET campo=REPLACE(campo,'zk','k');
  9. UPDATE tabla SET campo=REPLACE(campo,'zl','l');
  10. UPDATE tabla SET campo=REPLACE(campo,'zm','m');
  11. UPDATE tabla SET campo=REPLACE(campo,'zn','n');
  12. UPDATE tabla SET campo=REPLACE(campo,'zñ','ñ');
  13. UPDATE tabla SET campo=REPLACE(campo,'zp','p');
  14. UPDATE tabla SET campo=REPLACE(campo,'zq','q');
  15. UPDATE tabla SET campo=REPLACE(campo,'zr','r');
  16. UPDATE tabla SET campo=REPLACE(campo,'zt','t');
  17. UPDATE tabla SET campo=REPLACE(campo,'zv','v');
  18. UPDATE tabla SET campo=REPLACE(campo,'zw','w');
  19. UPDATE tabla SET campo=REPLACE(campo,'zx','x');
  20. UPDATE tabla SET campo=REPLACE(campo,'zy','y');
  21. UPDATE tabla SET campo=REPLACE(campo,'zz','z');
  22. UPDATE tabla SET campo=REPLACE(campo,'z0','0');
  23. UPDATE tabla SET campo=REPLACE(campo,'z1','1');
  24. UPDATE tabla SET campo=REPLACE(campo,'z2','2');
  25. UPDATE tabla SET campo=REPLACE(campo,'z3','3');
  26. UPDATE tabla SET campo=REPLACE(campo,'z4','4');
  27. UPDATE tabla SET campo=REPLACE(campo,'z5','5');
  28. UPDATE tabla SET campo=REPLACE(campo,'z6','6');
  29. UPDATE tabla SET campo=REPLACE(campo,'z7','7');
  30. UPDATE tabla SET campo=REPLACE(campo,'z8','8');
  31. UPDATE tabla SET campo=REPLACE(campo,'z9','9');
  32.  
  33.  
  34.  
  35. UPDATE tabla SET campo=REPLACE(campo,'aze','ae');
  36. UPDATE tabla SET campo=REPLACE(campo,'azi','ai');
  37. UPDATE tabla SET campo=REPLACE(campo,'azo','ao');
  38. UPDATE tabla SET campo=REPLACE(campo,'azu','au');
  39.  
  40. UPDATE tabla SET campo=REPLACE(campo,'eza','ea');
  41. UPDATE tabla SET campo=REPLACE(campo,'ezi','ei');
  42. UPDATE tabla SET campo=REPLACE(campo,'ezo','eo');
  43. UPDATE tabla SET campo=REPLACE(campo,'ezu','eu');
  44.  
  45. UPDATE tabla SET campo=REPLACE(campo,'iza','ia');
  46. UPDATE tabla SET campo=REPLACE(campo,'ize','ie');
  47. UPDATE tabla SET campo=REPLACE(campo,'izo','io');
  48. UPDATE tabla SET campo=REPLACE(campo,'izu','iu');
  49.  
  50. UPDATE tabla SET campo=REPLACE(campo,'oza','oa');
  51. UPDATE tabla SET campo=REPLACE(campo,'oze','oe');
  52. UPDATE tabla SET campo=REPLACE(campo,'ozi','oi');
  53. UPDATE tabla SET campo=REPLACE(campo,'ozu','ou');
  54.  
  55. UPDATE tabla SET campo=REPLACE(campo,'uza','ua');
  56. UPDATE tabla SET campo=REPLACE(campo,'uze','ue');
  57. UPDATE tabla SET campo=REPLACE(campo,'uzi','ui');
  58. UPDATE tabla SET campo=REPLACE(campo,'uzo','uo');

Algunas palabras pueden ser reemplazas de forma no deseada, por ejemplo "buzo" quedaria "buo". Te recomiendo que verifiques todo despues de ejecutar esto, y que en lo posible, quites los update que consideres insesarios antes de ejecutarlos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 12/11/2013, 08:31
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: problema replace

gracias pero con esa respuesta tengo que crear mas combinaciones la idea es dejar la palabra reservada que contenga 'z' intacta y las demas 'z' eliminarlas, osea pueden ser muchicimas mas combinaciones como zzzzzzzzzona_z_zzzsur, solo debería quedar zonasur
  #4 (permalink)  
Antiguo 12/11/2013, 09:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problema replace

Si no tienes idea de cuáles son las que están mal, o son demasiadas, no hay forma de hacer algo acotado para realizar lo que quieres.
Es un problema común en el caso de lo que se denomina "datos sucios". Muychas veces lo más sencillo es suprimir la información y procesarla de nuevo.
De hecho, lo mejor que puedes hacer es suprimir ese campo y crear una tabla que contenga esos valroes, relacionandolos con esta.
Es decir: Normalizar esa tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 12/11/2013, 13:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: problema replace

Hola diego_m180:

Coincido con gnzsoloyo en que esto parece ser más un problema de diseño en tus tablas, por lo tanto deberías ir al fondo del problema y plantear hacer esto de manera correcta, ahora bien, muchas veces no es posible hacer cambios a los modelos y tenemos que trabajar con lo que hay... si fuera el caso entonces se me ocurren varias alternativas para hacer lo que quieres... una por ejemplo sería hacer el siguiente procedimiento:

1. verificar si el campo contiene alguna de las palabras "reservadas" para el ejemplo haré zona. Si es así entonces puedes cambiar la palabra por un código que sea imposible que aparezca en tu campo, algo así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+-----------------------+
  3. | id   | descripcion           |
  4. +------+-----------------------+
  5. |    1 | zzzzzzzzzona_z_zzzsur |
  6. |    2 | cobranzazzeliminar    |
  7. |    3 | zonazsur              |
  8. +------+-----------------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT descripcion, REPLACE(descripcion, 'zona', 'PERRO')
  12.     -> FROM tabla;
  13. +-----------------------+---------------------------------------+
  14. | descripcion           | REPLACE(descripcion, 'zona', 'PERRO') |
  15. +-----------------------+---------------------------------------+
  16. | zzzzzzzzzona_z_zzzsur | zzzzzzzzPERRO_z_zzzsur                |
  17. | cobranzazzeliminar    | cobranzazzeliminar                    |
  18. | zonazsur              | PERROzsur                             |
  19. +-----------------------+---------------------------------------+
  20. 3 rows in set (0.00 sec)

Una vez que haces esto, entonces puedes eliminar TODAS LAS Z's del campo:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   descripcion,
  3.     ->   REPLACE(REPLACE(descripcion, 'zona', 'PERRO'), 'z', '') sin_zetas
  4.     -> FROM tabla;
  5. +-----------------------+-----------------+
  6. | descripcion           | sin_zetas       |
  7. +-----------------------+-----------------+
  8. | zzzzzzzzzona_z_zzzsur | PERRO__sur      |
  9. | cobranzazzeliminar    | cobranaeliminar |
  10. | zonazsur              | PERROsur        |
  11. +-----------------------+-----------------+
  12. 3 rows in set (0.00 sec)

Finalmente puedes hacer el proceso inverso, regresando la palabra PERRO a zona:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   descripcion,
  3.     ->   REPLACE(
  4.     ->     REPLACE(
  5.     ->       REPLACE(descripcion, 'zona', 'PERRO')
  6.     ->             , 'z', '')
  7.     ->           , 'PERRO', 'zona')sin_zetas
  8.     -> FROM tabla;
  9. +-------------------------+-----------------------+
  10. | descripcion             | sin_zetas             |
  11. +-------------------------+-----------------------+
  12. | zzzzzzzzzona_z_zzzsur   | zona__sur             |
  13. | cobranzazzeliminar      | cobranaeliminar       |
  14. | zonazsur                | zonasur               |
  15. +-------------------------+-----------------------+
  16. 3 rows in set (0.00 sec)

Esto por supuesto que no es la forma más eficiente de hacerlo, pero es una idea... debes tener mucho cuidado de colocar un patrón QUE NO SE REPITA, en el ejemplo observa lo que pasa si el campo contiene la misma palabra que utilizo de reemplado (PERRO):

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   descripcion,
  3.     ->   REPLACE(
  4.     ->     REPLACE(
  5.     ->       REPLACE(descripcion, 'zona', 'PERRO')
  6.     ->             , 'z', '')
  7.     ->           , 'PERRO', 'zona')sin_zetas
  8.     -> FROM tabla;
  9. +-------------------------+-----------------------+
  10. | descripcion             | sin_zetas             |
  11. +-------------------------+-----------------------+
  12. | zzzzzzzzzona_z_zzzsur   | zona__sur             |
  13. | cobranzazzeliminar      | cobranaeliminar       |
  14. | zonazsur                | zonasur               |
  15. | MI PERRO SE LLAMA PERRO | MI zona SE LLAMA zona |
  16. +-------------------------+-----------------------+
  17. 4 rows in set (0.00 sec)
Te recomiendo que en lugar de tratar de hacerlo todo desde un select, hagas una función, o que lo programes en un SP.

Saludos
Leo.
  #6 (permalink)  
Antiguo 12/11/2013, 13:14
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: problema replace

Entiendo que mi alternativa de fuerza bruta es rustica.

permitanme poner codigo php en este foro:


Cita:
Editado: Código de programación no permitido en Foros de Bases de Datos.
Leer las normas, por favor.
este codigo genera datos ilegibles, y , una vacuna SQL para corregirlos. solo cambiando los valores de los array por los tuyos, sirve para cualquier problema de datos sucios.

La fuerza bruta sutil.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por gnzsoloyo; 12/11/2013 a las 15:08
  #7 (permalink)  
Antiguo 12/11/2013, 14:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: problema replace

No sé si hay que quitar las z de sobra de todos los registros o solo de aquellos donde aparecen esas palabras. Yo soy partidario de lo que dice @leonardo_josue, pero lo haría del siguiente modo:
- reemplazo zona por çona, cobranza por cobrança y eficaz por eficaç en tres reemplazos;
- luego reemplazo todas las z por nada
- luego vuelvo a reemplazar çona por zona, cobrança por cobranza y eficaz por eficaç en otros tres reemplazos.
En total serían 7 cambios y creo que lo tendrías todo.
Pero no nos has dicho si tienes que hacerlo en todos los registros o solo en aquellos en que estas palabras aparecen. Si fuera esto último, eso exigiría el WHERE...

Última edición por jurena; 12/11/2013 a las 15:37
  #8 (permalink)  
Antiguo 12/11/2013, 14:34
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: problema replace

Perdon, el script anterior anda mal, este si funcionaria:

Cita:
Editado: Código de programación no permitido en Foros de Bases de Datos.
Leer las normas, por favor.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por gnzsoloyo; 12/11/2013 a las 15:07
  #9 (permalink)  
Antiguo 12/11/2013, 15:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problema replace

Temas de programación son OFF-TOPIC en los foros de BBDD. Las soluciones en este deben implicar sólo SQL.
Para soluciones programáticas sobre PHP está el foro de PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: replace
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 18:24.