SQL - reemplazo de caracteres

   
Vista:

reemplazo de caracteres

Publicado por Mishel (2 intervenciones) el 10/03/2010 15:34:53
hola, tengo una consulta, yo tengo una base de datos de unos 200000 registros y lo que necesito es actualizar unos campos, por ejemplo, en el campo telefono en algubnos registros esta puesto el numero 2124587458 pero necesito que vaya 12124587458 o en otros casos los numeros de telefono tienen un ? al final y neecsito retirarlos.
Mi pregunta es como hacer una funcion o algo asi que me permita coger los registros que tienen este problema y luego quitar el caracter o aumentar el caracter que hace falta o que sobra.
Alguna vez alguien de mi oficina lo hizo pero ahora no esta y no me quiere ayudar..

Les agradezco mucho su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:reemplazo de caracteres

Publicado por Leonardo Josue (877 intervenciones) el 10/03/2010 17:02:46
Buenos días Mishel:

Tengo algunas dudas en cuanto a lo que necesitas, pero a ver si más o menos es algo como esto. Voy a suponer que tienes una tabla que se llama dbo.telefonos de la siguiente manera.

Telefono
-----------------
2124587458
12345?
2124587458
67890?
1234567890
2124587458
9876546?

Entonces según lo que dices aquellos campos que tengan el telefono 2124587458 deberán cambiar por 12124587458 y aquellos que tienen un signo ? al final se les debe quitar y el resto deben quedar como estaban... por lo tanto la salida que esperarías sería esta:

Telefono
-----------------
12124587458
12345
12124587458
67890
1234567890
12124587458
9876546

Por lo tanto para SQL server la actualización la podrías hacer con esto:

update dbo.telefonos set telefono =
case when telefono = '2124587458' then '1' + '2124587458' else
case when substring(telefono, len(telefono),1) = '?' then substring(telefono, 1, len(telefono)-1) else telefono
end
end

Si utilizas algún otro manejador de BD diferente a SQL Server sería cuestión de que adecues la consulta. y recuerda hacer un respaldo de tu tabla antes de hacer actualizaciones masivas, para evitar posibles pérdidas de información. Un saludo y espero tus comentarios.

Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:reemplazo de caracteres

Publicado por Mishel (2 intervenciones) el 10/03/2010 18:27:47
Muchas gracias por eso, pero, es que no siempre es asi, por ejemplo tengo los datos asi:
21204514578
21254785478
121254785477
021254785474
24758475122?

y asi por ejmplo, como los tengo por paises, algunos se ingresaron con el codigo de pais, otros no, otros se ingresaron con el codigo de pais mas el codigo de area, otros con ? al final, entonces por ejemplo a los del pais USA necesito qeu todos tengan el 1 adelante, los del pais Reino unido necesito que todos tengan el 44 adelante y quitar el 0 que es el codigo de area y a los que tengan ? quitarles para que quede a la final asi:

121204514578
121254785478
121254785477
4421254785474
124758475122

dependiendo el pais.
La persona que una vez nos arreglo eso, lo hizo con una funcion o algo asi qeu por ejemplo tomaba la cadena, e iba recorriendo uno por uno los caracteres, en el caso de Reino Unido, recorria el 4, luego el 4 y si luego del 4 encontraba un 0 lo retiraba y colocaba el resto de la cadena, o si no comenzaba el numero con 44 sino con 0 le ponia el 44 adelante y le borraba el 0
mas o menos asi era lo que hacia pero se fue y no me dejo esa funcion o lo que sea que haya hecho
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:reemplazo de caracteres

Publicado por Leonardo Josue (877 intervenciones) el 10/03/2010 23:35:02
Entonces definitivamente tienes que programar una función de formateo, donde especifiques qué tratamiento se le tiene que dar para cada país. por ejemplo, te pongo una función la cual verifica primeramente si el país que se le envía como parámetro es EUA, si es así entonces pregunta si el teléfono comienza por un uno y si no es así entonces se lo agrega.

ALTER FUNCTION [dbo].[formatea_telefono](@pais varchar(15), @telefono varchar(15))
RETURNS VARCHAR(15)
AS
BEGIN
DECLARE @Telefono_Formateado VARCHAR(15)
SET @Telefono_Formateado = ''
IF @pais = 'EUA'
BEGIN
IF SUBSTRING(@TELEFONO, 1, 1) != 1 --El teléfono no comienza con el número 1, por lo tanto lo agregamos
BEGIN
SET @Telefono_Formateado = '1' + @telefono
END
ELSE
BEGIN
SET @Telefono_Formateado = @telefono
END
END
RETURN @Telefono_Formateado
END

La función entonces hace esto
dbo.formatea_telefono('EUA', '21204514578') -> 121204514578
dbo.formatea_telefono('EUA', '123') ->123

Por supuesto que la función no hace todo lo que deseas, tendrías que agregar qué criterios se tienen que aplicar para el caso de Reino Unido y cualquier otro país que requiera un tratamiento especial, pero te recuerdo que este es un foro de DUDAS, y no hacemos el trabajo de otros... sería cuestión de que complementes esta función de acuerdo a lo que necesitas.

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar