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

consulta para borrar solo letras de un campo y dejar solo numeros

Estas en el tema de consulta para borrar solo letras de un campo y dejar solo numeros en el foro de Mysql en Foros del Web. Hola tengo una base de datos mysql y tengo una tabla mas o menos con 50 mil registros y en un campo de telefono (varchar) ...
  #1 (permalink)  
Antiguo 24/06/2009, 06:29
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
De acuerdo consulta para borrar solo letras de un campo y dejar solo numeros

Hola

tengo una base de datos mysql

y tengo una tabla mas o menos con 50 mil registros
y en un campo de telefono (varchar) me han introducido numeros y letras y me han pedido que borre las letras de los telefonos porque ya no las van a usar.

como podria borrar solo las letras y dejar los numeros nomas?

es decir
TELEFONO
6645893A dejarlo 6645893
88EA11234 dejarlo 8811234


y asi sucesivamente quitarle todas las letras a ese campo y solo dejar numeros
es posible hacerlo con una consulta Sql un update o algo?
gracias,
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #2 (permalink)  
Antiguo 24/06/2009, 07:01
 
Fecha de Ingreso: noviembre-2006
Mensajes: 27
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

Wenas no se si existe alguna función especial para mysql para verificar si es numérico o no pero te paso una función en php que te puede ser útil
Código php:
Ver original
  1. $telefonos=mysql_query("SELECT id,telefono FROM nombre_tabla");
  2.  
  3. while($datos=mysql_fetch_array($telefonos)){
  4. $id_tabla=intval($datos['id']);
  5. $numero_telef=$datos['telefono'];
  6. if(!is_numeric($numero_telef)){
  7. $numero_telef_limpio=ereg_replace("[^0-9]",'',$numero_telef);
  8. mysql_query("UPDATE nombre_tabla SET telefono='$numero_telef_limpio' WHERE id='$id_tabla'");
  9. }
  10. }

Espero te sea útil.

Un saludo.
  #3 (permalink)  
Antiguo 24/06/2009, 07:14
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

gracias por la respuesta.
pero por ahora me toca buscar alguna funcion directamente en sql
ya que en ese servidor no hay instaldo ningun servidor qeu soporte php solo el de la base de datos y no tengo acceso a instalarlo por ahora..

hay instalado mysql 4.1
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 24/06/2009, 08:11
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

No creo que en una consulta haya forma de hacer este tipo de conversiones.
Lo que podrías hacer, es una función en mysql que cuente el numero de caracteres del campo (con length(campo)), despues con la función substring, recorrer con un while cada letra de la palabra y comparar si el ascii de esa letra (Con la función ascii) está en el rango de las letras.
(entre 65 y 90 para mayusculas y entre 97 y 122 para minusculas) Si corresponde a ese rango, realice un replace(letra,letra_encontrada,'').

Después de creada la función, la puedes llamar en un update para hacer los cambios respectivos.

No se me ocurre otra forma.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 24/06/2009, 08:20
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

bueno viendo bien la bd las letras estan siempre al final y creo ke es solo una letra..

aunke los numeros si varian su longitud..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #6 (permalink)  
Antiguo 24/06/2009, 08:36
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

Si essta seguro que solo hay una letra al final y es solo una, puede utilizar esto:

Código mysql:
Ver original
  1. mysql> select *from telefonos;
  2. +----------+
  3. | telefono |
  4. +----------+
  5. | 8890204a |
  6. | 8890504f |
  7. | 8890514l |
  8. +----------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> update telefonos set telefono=substring(telefono,1,length(telefono)-1);
  12. Query OK, 3 rows affected (0.00 sec)
  13. Rows matched: 3  Changed: 3  Warnings: 0
  14.  
  15. mysql> select *from telefonos;
  16. +----------+
  17. | telefono |
  18. +----------+
  19. | 8890204  |
  20. | 8890504  |
  21. | 8890514  |
  22. +----------+
  23. 3 rows in set (0.00 sec)
  24.  
  25. mysql>
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 24/06/2009, 08:38
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

muchas gracias si por lo qeu me informa mi cliente solo hay una letra al final.. lo qeu si se es ke la longitud varia
es decir
puede ser asi
123456A
123456795B
12345A
igual funcionaria?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #8 (permalink)  
Antiguo 24/06/2009, 08:41
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

La longitud no tiene nada que ver.
Esto funciona para teléfonos de cualquier longitud, siempre y cuando solo sea una letra al final.

Una explicación corta del procedimiento:
UPDATE telefonos SET telefono=SUBSTRING(telefono,1,LENGTH(telefono)-1);
El substring toma el valor del campo y lo recorre desde la posición 1(La primera posición) hasta la penúltima posición (Por eso el -1 en length).

Por eso sirve, para múltiples longitudes del campo.

Espero le sirva.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 24/06/2009, 08:42
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

haa se me olvidaba un detalle..
no todos los telefonos tienen letras..
algunos tienen letras otros no

123456A
123456795B
12345A
123456
123456795
12345
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #10 (permalink)  
Antiguo 24/06/2009, 08:54
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

Ahí si tendría problemas.

Cambia un poco la sentencia.

Código mysql:
Ver original
  1. mysql> select *from telefonos;
  2. +-----------+
  3. | telefono  |
  4. +-----------+
  5. | 8890204   |
  6. | 8890504   |
  7. | 8890514   |
  8. | 82114898u |
  9. | 82114898j |
  10. +-----------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> update telefonos set telefono=if(ascii(right(telefono,1))<48 or ascii(right(telefono,1))>57,substring(telefono,1,length(telefono)-1),telefono);
  14. Query OK, 2 rows affected (0.00 sec)
  15. Rows matched: 5  Changed: 2  Warnings: 0
  16.  
  17. mysql> select *from telefonos;
  18. +----------+
  19. | telefono |
  20. +----------+
  21. | 8890204  |
  22. | 8890504  |
  23. | 8890514  |
  24. | 82114898 |
  25. | 82114898 |
  26. +----------+
  27. 5 rows in set (0.00 sec)
  28.  
  29. mysql>

Esta resuelve el problema.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #11 (permalink)  
Antiguo 24/06/2009, 12:39
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

lo probare y te comento..
gracias por tu tiempo y colaboracion.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #12 (permalink)  
Antiguo 25/06/2009, 13:25
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: consulta para borrar solo letras de un campo y dejar solo numeros

muchas gracias por ahora me funcinoa perfectamente cualquier cosa te comento
gracias..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
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:58.