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

Reemplazar caracteres con stored procedure...

Estas en el tema de Reemplazar caracteres con stored procedure... en el foro de Mysql en Foros del Web. Hola Gente, desde hace un par de dias que estoy con esto y no le encuentro la vuelta. Hace un tiempo desarrolle una funcion que ...
  #1 (permalink)  
Antiguo 22/04/2008, 07:16
 
Fecha de Ingreso: enero-2008
Mensajes: 30
Antigüedad: 16 años, 3 meses
Puntos: 0
Reemplazar caracteres con stored procedure...

Hola Gente, desde hace un par de dias que estoy con esto y no le encuentro la vuelta. Hace un tiempo desarrolle una funcion que llama a un procedimiento realizado en una base de datos mysql. Esta recibe como parametro un nombre y el procedimiento se encarga de analizar el nombre y buscarlo por parte en una base de deudores. Por ejemplo, para el nombre Juan Perez buscara en la base con el siguiente SQL select * from Base where nombre like '%Juan Perez%'. Si no lo encuentra ejecutara otra vez la sentencia SQL pero con '%Juan%', sino lo lo encuentra comenzara al reves, buscara primero el nombre completo y luego buscara solamente "Perez".- De acuerdo al registro encontrado (si coincide exactamente con el nombre) sacara un promedio que indicara si el nombre coincide el 100%, por cada busqueda extra este promedio disminuye.
El problema es el siguiente, no funciona bien con los nombres con "ñ". Asi que lo que estoy intentando hacer es cuando el procedimiento recibe el nombre, recorrer todo el string buscando una "ñ" si encuentra alguna reemplazar este caracter por otro (cualquiera de estos %,?,_,etc). Estoy trabado en el reemplazo del caracter. Recorro el string con un while, si encuentra una "ñ" determino la posicion en el string pero nose como reemplazarla.
Esto es parte del codigo que uso.

Set Nombre=Cancat(Trim(nme), '?');

La variable nme contiene el nombre a buscar. La variable Nombre es la que guarda el nombre modificado y lo uso para hacer la buisqueda por las bases de deudores.
El nombre no puede ser modificado desde la aplicacion por que a esta base convergen programas realizados en diferentes lenguajes (visual basic, c++, php, clarion) asi que si o si tiene que ser reemplazado durante el procedimiento.
  #2 (permalink)  
Antiguo 22/04/2008, 08:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Reemplazar caracteres con stored procedure...

Tal vez podrías hacerlo con replace, pero yo te aconsejaría ver la raíz del problema, que no es otra que el charset de la base, el cotejamiento o la collation del campo y la tabla donde buscas.
Si usas latin1 la collation o cotejamiento que deberías usar es latin1_spanisch_ci

Si estás trabajando con charset UTF8, pon la collation utf8_spanisch_ci para la tabla y para el campo. Tal vez así no tengas problemas con las eñes.

Mira el charset y el cotejamiento de la tabla y el campo.

Última edición por jurena; 22/04/2008 a las 08:32
  #3 (permalink)  
Antiguo 22/04/2008, 08:47
 
Fecha de Ingreso: enero-2008
Mensajes: 30
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Reemplazar caracteres con stored procedure...

Es correcto todo lo que dijiste, pero el problema no es en la base sino en el programa que realiza la consulta. En alguno de ellos se usa un emulador como terminal y este es el que reemplaza la ñ con un # por lo tanto la busqueda no se realiza correctamente. Estos sistemas estan fuera de mantenimiento y en el plazo de tres o seis meses seran cambiados, asi que me resulta mas barato realizar una modificacion en la base que ponerme a estudiar un lenguaje para editar el fuente de este programa.
Lo intente hacer con select replace(string, buscar_valor, reemplazar_por) pero me devuelve un error. Debido a que este select devuelve un resultado y el procedimiento no lo hace hasta que termina.
  #4 (permalink)  
Antiguo 22/04/2008, 10:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Reemplazar caracteres con stored procedure...

No lo he probado con procedure, porque no he empezado con ello, pero una función que retorna un valor hace su trabajo; le introduces como parámetro el texto y te devuelve el texto cambiado
CREATE FUNCTION quita(key char(20)) RETURNS CHAR(20)
RETURN REPLACE(key,'ñ', '#');

luego invocas la función SELECT quita ('peña') y verás que lo ha convertido.
No sé si tras crear la función puedes introducirla en un procedure... , pero investiga el tema, o tal vez prueba a hacer que la búsqueda la haga el procedure sobre una variable que sea el resultado de hacer un replace al parámetro ingresado.

No sé, se me ocurre...
  #5 (permalink)  
Antiguo 22/04/2008, 11:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: Reemplazar caracteres con stored procedure...

no se para lanzar ideas...

Si determinas la posicion de la ñ puedes guardar el substring anterior y el posterior en dos variables y luego concatenarlos poniendo el caracter que quieras entre los dos... no? Y luego hacer la consulta con el string resultante...

o substr(nme,0,posicion ñ-1) + caracter alternativo + substr(nme,posicion ñ+1, final) sin variables auxiliares... no te figes en la sintaxis ni las funciones...

Yo lo hice una vez en vb antes de descubrir replace(...)

Quim
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 22:45.