Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/11/2013, 13:03
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 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.