Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Remplazar un caracter en Firebird 1.5 (https://www.clubdelphi.com/foros/showthread.php?t=90597)

ciudad54 21-07-2016 15:38:05

Remplazar un caracter en Firebird 1.5
 
Tengo una base de datos Firebird 1.5, con 100mil registros.
Por alguna razón se me planteo que debo cambiar dichos registros en un campo llamado EXP de la Tabla GES, el cual contiene una especie de ID con la siguiente característica: H01-###### (números secuenciales). Se me solicitó cambiar la H por 0, para que sea 001-.
Busque las funciones Replace, Overlay en Firebird pero la versión en la que se utiliza la DB no soporta dichas funciones.

Alguna alternativa para hacer un reemplazo de dicho caracter?

Gracias de antemano.

Casimiro Notevi 21-07-2016 17:01:24

1 Archivos Adjunto(s)
Código SQL [-]
update tbClientes a
set a.nombre='0'|| (select SUBSTRING(b.nombre from 2 for char_length(a.nombre)) from tbClientes b where a.id=b.ID)


ciudad54 21-07-2016 17:22:47

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 67.
char_length.

Casimiro Notevi 21-07-2016 17:27:17

Quizás la versión 1.5 todavía no tenía esa función, pero puede que tengas length(loquesea), no lo recuerdo de memoria, echa un vistazo al manual ;)

ecfisa 21-07-2016 23:59:45

Hola.

Así es, en la versión 1.5 aún no existe esa función. Pero podes arreglarte de este modo:
Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER PROCEDURE LEN_STR (
    PARAMSTR VARCHAR(255))
RETURNS (
    RESULT INTEGER)
AS
DECLARE VARIABLE AUX VARCHAR(255);
BEGIN
  AUX = '';
  RESULT = 0;
  WHILE (NOT PARAMSTR LIKE AUX) DO
  BEGIN
    AUX = AUX || '_';
    RESULT = RESULT + 1;
  END
  SUSPEND;
END^

SET TERM ; ^
Y luego podes usar la sentencia que te indicó Casimiro con un pequeño cambio:
Código SQL [-]
UPDATE TABLA T
  SET T.CAMPO = '0' || SUBSTRING( CAMPO FROM 2 FOR (SELECT RESULT FROM LEN_STR(CAMPO))-1 )

Saludos :)


La franja horaria es GMT +2. Ahora son las 19:20:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi