Eliminar cualquier caracter excepto 0-9 y símbolo +
Publicado por Pedro (8 intervenciones) el 02/09/2015 18:30:59
Buenas tardes,
en la base de datos de mi ayuntamiento tenemos el campo "Teléfono1" y "Teléfono2" y los queremos normalizar para que sólo muestre números del 0 al 9 y, a lo sumo, el símbolo "+" de los teléfonos extranjeros. Entiendo que con el ejemplo para "Teléfono1", con cambiar luego el 1 por el 2, la sentencia es la misma.
El normalizarlo se debe a que, con el paso del tiempo, ha habido gente que ha puesto espacios o puntos entre los números al introducirlos, o alguna anotación del teléfono ("madre", "padre", etc.).
Tengo estas sentencias que me solucionan parte del problema:
select telefono1 from FiscalPolicia where Telefono1 not like '%[a-z]%' and Telefono1 like '% %' order by Telefono1
Con esta veo los teléfonos de los ciudadanos donde el teléfono no tenga ninguna letra y que tengan un espacio entre medias, es decir, nos quitamos de encima los que tiene puesto Madre o padre, por ejemplo.
select telefono1, codigofiscal from fiscalpolicia where telefono1 like '%[a-z]%' order by Telefono1
Con esta veo los que tienen alguna letra en el campo teléfono.
select replace(telefono1,' ',''), codigofiscal from fiscalpolicia where telefono1 not like '%[a-z]%' and Telefono1 like '% %' order by Telefono1
Con esta, veo como queda si lo modificamos. Quita espacios y muestra todo junto.
update FiscalPolicia set Telefono1 = replace(telefono1,' ','') where telefono1 not like '%[a-z]%' and Telefono1 like '% %'
Con esta aplico el SELECT REPLACE de arriba.
Aunque sería un apaño que solucionaría gran parte del problema, busco una sentencia que lo haga todo con un sólo UPDATE. La idea: que cualquier carácter distinto del 0 al 9 y el símbolo MÁS (si el "+" lo complica, podemos eliminarlo también y dejar sólo los números) sea eliminado.
Una propuesta, pero que no sirve por lo visto para SQL Server 2008, era esta: update fiscalpolicia set telefono1=replace(telefono1, [^0-9+],'') where telefono1<>replace(telefono1, [^0-9+],'')
Si pudiera ser también posible tener los SELECT para ver los resultados antes de aplicar UPDATE, sería ideal.
Mil gracias de antemano por vuestra atención.
en la base de datos de mi ayuntamiento tenemos el campo "Teléfono1" y "Teléfono2" y los queremos normalizar para que sólo muestre números del 0 al 9 y, a lo sumo, el símbolo "+" de los teléfonos extranjeros. Entiendo que con el ejemplo para "Teléfono1", con cambiar luego el 1 por el 2, la sentencia es la misma.
El normalizarlo se debe a que, con el paso del tiempo, ha habido gente que ha puesto espacios o puntos entre los números al introducirlos, o alguna anotación del teléfono ("madre", "padre", etc.).
Tengo estas sentencias que me solucionan parte del problema:
select telefono1 from FiscalPolicia where Telefono1 not like '%[a-z]%' and Telefono1 like '% %' order by Telefono1
Con esta veo los teléfonos de los ciudadanos donde el teléfono no tenga ninguna letra y que tengan un espacio entre medias, es decir, nos quitamos de encima los que tiene puesto Madre o padre, por ejemplo.
select telefono1, codigofiscal from fiscalpolicia where telefono1 like '%[a-z]%' order by Telefono1
Con esta veo los que tienen alguna letra en el campo teléfono.
select replace(telefono1,' ',''), codigofiscal from fiscalpolicia where telefono1 not like '%[a-z]%' and Telefono1 like '% %' order by Telefono1
Con esta, veo como queda si lo modificamos. Quita espacios y muestra todo junto.
update FiscalPolicia set Telefono1 = replace(telefono1,' ','') where telefono1 not like '%[a-z]%' and Telefono1 like '% %'
Con esta aplico el SELECT REPLACE de arriba.
Aunque sería un apaño que solucionaría gran parte del problema, busco una sentencia que lo haga todo con un sólo UPDATE. La idea: que cualquier carácter distinto del 0 al 9 y el símbolo MÁS (si el "+" lo complica, podemos eliminarlo también y dejar sólo los números) sea eliminado.
Una propuesta, pero que no sirve por lo visto para SQL Server 2008, era esta: update fiscalpolicia set telefono1=replace(telefono1, [^0-9+],'') where telefono1<>replace(telefono1, [^0-9+],'')
Si pudiera ser también posible tener los SELECT para ver los resultados antes de aplicar UPDATE, sería ideal.
Mil gracias de antemano por vuestra atención.
Valora esta pregunta


0