Ir al contenido


Foto

cambiar tilde por espacio con un select


  • Por favor identifícate para responder
4 respuestas en este tema

#1 martinartaza

martinartaza

    Advanced Member

  • Miembros
  • PipPipPip
  • 159 mensajes
  • LocationArgentina, Tucuman

Escrito 23 septiembre 2011 - 09:07

Hola que tal, querida comunidad, ando buscando la forma de cambiar el tilde por un espacio en blanco, estoy usando Interbase 6.5, con SQLDialect 3. Eh buscado en el foro y encontre mucho sobre los acentos o sea (á, ´b, etc..)
Yo necesito consultar el tilde, que estoy migrando una base de datos de interbase a postgres
Por ejemplo en interbase tengo la siguiente tabla:
Proveedores
Codigoprovee | Descripcion | etc....
1                    | "Cocacola"  | etc...
2                    |  .....            | ...
........................................................
20                  | "BEARD'S GAME" | etc....
....

Al pasar estos datos a postgres me dan problema ya que en postgres uso codificacion UTF 8.
Ando buscando un select que me devuelva la tabla de la siguiente manera.

Codigoprovee | Descripcion | etc....
1                    | "Cocacola"  | etc...
2                    |  .....            | ...
........................................................
20                  | "BEARD S GAME" | etc....
....

Algunos script que estoy usando

Para filtrar uso
select * from compras
where nombreprovee like '%''%'


También resolver un caso un puntal, a esto lo quiero hacer general.
Utilizo

select
cast (case Descripcion
when 'BEARD''S GAME' then 'BEARD S GAME'
else Descripcion end as varchar(40)) as nombreprovee
from Proveedores


Bueno, eso no se como remplazar el anterior case por un comando tipo strremplace o algo por el estilo que funcione dentro de un select (no procedure).
La idea de resolver dentro de un select es que el sistema tiene más de 150 tablas y por cada tabla que tengo un problema parecido no quiero usar un store procedure para hacer el pase.

Desde ya muchas gracias.
Sebastián Martín, Artaza Saade.

  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 23 septiembre 2011 - 09:37

No se si Interbase 6.5 disponga de la función "REPLACE", pero de no ser así una posible solución sería migrar primero la DB a Firebird 2.x que si la soporta; posteriormente sería recorrer la tabla con un  FOR SELECT  o aplicar un UPDATE a toda la tabla y autilizar la función REPLACE que reemplazará todas las ocurrencias de un caracter por el que desees.


La función REPLACE recibe tres parámetros el primero la Cadena que vamos a tratar, el segundo la cadena o carácter que queremos sustituir y el tercero la  nueva cadena o carácter sustitutos, esta función devuelve la cadena reformada.


Saludos
  • 0

#3 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 23 septiembre 2011 - 09:41

El UPDATE sería algo así:



UPDATE TUTABLA SET TUCAMPO = REPLACE(TUCAMPO, 'á', 'a');


/*otra opción*/


UPDATE TUTABLA SET TUCAMPO = REPLACE(TUCAMPO, Ascii_Char(Número de carácter ), ' ');



Si se llegara a tener problemas con apóstrofes o caracteres especiales se podría pasar como parámetro a REPLACE la función "Ascii_Char( )" con el correspondiente número de carácter como parámetro.


La función REPLACE también la puedes usar con SELECT, como es tu deseo.



SELECT REPLACE(TUCAMPO, Ascii_Char(Número de carácter ), ' ') FROM TU TABLA




Saludos
  • 0

#4 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 23 septiembre 2011 - 09:56

Si no tuviera Interbase la función REPLACE que es lo mas probable en su versión 6.5 y no puedes migrar a una versión superior, existe un set de UDF's muy completo que podrías usar para implementar el REPLACE,


link: http://freeadhocudf....html#bearbeiten


Solo verifica bien el registro de la UDF en este caso solo interesa F_REPLACE para que no registrar todas y puedas intentarlo.


Saludos
  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 23 septiembre 2011 - 10:03

Si no tuviera Interbase la función REPLACE que es lo mas probable en su versión 6.5 y no puedes migrar a una versión superior, existe un set de UDF's muy completo que podrías usar para implementar el REPLACE,


link: http://freeadhocudf....html#bearbeiten


Solo verifica bien el registro de la UDF en este caso solo interesa F_REPLACE para que no registrar todas y puedas intentarlo.


Saludos



Muy buena opción Fredy.
  • 0




IP.Board spam blocked by CleanTalk.