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)
-   -   Rellenar de ceros en firebird. (https://www.clubdelphi.com/foros/showthread.php?t=58004)

eduarcol 04-07-2008 14:45:23

Rellenar de ceros en firebird.
 
Como puedo hacer para rellenar un campo con ceros desde SQL, en Firebird 2.0. Yo tengo un query asi:

Código Delphi [-]
Insert into Facturas (Numero,...) values ((Select Gen_Id(FACTURAS, 1) from rdb$database));

hasta aqui todo bien, pero el numero de factura es string y deberia quedar
Cita:

00000001
Firebird tendra alguna funcion para eso o debo generar el UDF???

duilioisola 04-07-2008 15:06:11

en el trigger:

Código SQL [-]
begin
   numero = Gen_Id(FACTURAS, 1);
   num_factura = cast(numero as varchar(8));
   /* 8 guiones bajos, significa 8 espacios de largo */
   while (new.num_factura not like '________') do 
      new.num_factura='0'||new.num_factura;
end;

jhonny 04-07-2008 15:08:37

Otra opción es la siguiente:

En Firebird 2.1 no tendrias que hacer nada mas ya que existe la función lpad dentro del motor... solo sería cuestión de hacer lo siguiente:

Código SQL [-]
Insert into Facturas (Numero,...) values (lpad((Select Gen_Id(FACTURAS, 1) from rdb$database), 8, '0'));

Pero como estas usando Firebird 2.0, deberas registrar la UDF, lo bueno es que esa función ya viene en las UDFs que se distribuyen dentro de Firebird 2.0, por lo que solo bastaría con hacer lo siguiente:

Código SQL [-]
DECLARE EXTERNAL FUNCTION lpad 
  CSTRING(255), INTEGER, CSTRING(1)
  RETURNS CSTRING(255) FREE_IT
  ENTRY_POINT 'IB_UDF_lpad' MODULE_NAME 'ib_udf';

Y luego si, en tu sentencia SQL, hacer lo que dije mas arriba, osea:

Código SQL [-]
Insert into Facturas (Numero,...) values (lpad((Select Gen_Id(FACTURAS, 1) from rdb$database), 8, '0'));

Y listo, eso es todo. Espero te sirva :).

eduarcol 04-07-2008 15:38:51

gracias a los dos, voy a ponerlo en practica a ver que tal

eduarcol 04-07-2008 16:14:56

ok pobre la de Udf y funciono de pelos, ahora en termino de rendimiento que es lo mas recomendado?, buscar si la udf ya esta registrada o registrarla siempre que la necesite?, al menos en local no velo diferencia significativa, en redes no he podido probarlo :confused:

RolphyReyes 04-07-2008 16:25:00

Saludos.

Para que te funcione debes de registrarla inmediamente, osea que si ya tienes la BD en produccion debes de ir donde este e instalarla la UDF.

Hasta luego.

jhonny 04-07-2008 16:49:13

Cita:

Empezado por RolphyReyes (Mensaje 298276)
Saludos.

Para que te funcione debes de registrarla inmediamente, osea que si ya tienes la BD en produccion debes de ir donde este e instalarla la UDF.

Hasta luego.

Lo bueno es que como esta función pertenece a una UDF se que ditribuye con FireBird 2.0, entonces ya la deben tener los servidores donde instalaste Firebird 2.0, solo sera cuestión de ejecutar el script para registrarla y listo (Con cualquier actualizador de tu aplicativo, podrias hacerlo).

Pero eso si, debes tener en cuenta que si te actualizas a Firebird 2.1 o superior, ya no necesitaras registrarla, porque dicha función ya viene en el motor ;).

Al González 05-07-2008 05:25:57

Cita:

Empezado por jhonny (Mensaje 298280)
...Pero eso si, debes tener en cuenta que si te actualizas a Firebird 2.1 o superior, ya no necesitaras registrarla, porque dicha función ya viene en el motor ;).

Una idea para tu blog: creo que sería interesante que publicaras una especie de prontuario con todas las nuevas funciones que vienen integradas en Firebird 2 y 2.1. Para los que en algún momento daremos el salto desde la versión 1.5. :)

Saludos y felicidades por los cinco mil "posts". ;)

Al.

jhonny 05-07-2008 17:31:41

Cita:

Empezado por Al González (Mensaje 298423)
Una idea para tu blog: creo que sería interesante que publicaras una especie de prontuario con todas las nuevas funciones que vienen integradas en Firebird 2 y 2.1. Para los que en algún momento daremos el salto desde la versión 1.5. :)

Saludos y felicidades por los cinco mil "posts". ;)

Al.

Primero que todo, gracias por la felicitación :).

En cuanto a lo de publicar las funciones de Firebird en el Blog, pues es una labor que pronto ire publicando, no todas al tiempo porque son muchas, pero si una a una, de todas formas por ahora he ido publicando las caracteristicas principales.

maxid 23-10-2008 18:56:20

Muy util
 
No sabia de la funcion y me vino al pelo ya que queria una columna año y mes ordenada pero al no tener los ceros a la izquierda me ordena el 1 juanto al diez y no muestra la consecutividad.

Gracias por tu aporte

jhonny 23-10-2008 19:25:50

Que bueno que te haya servido la función, ya sea que te refieras a la mia o a la indicada por duilioisola :).

A proposito, el articulo que prometí en el 9 post de este hilo, decidí hacerlo en aquella ocasión simplemente traducioendo el archivo README.builtin_functions.txt de Firebird 2.1 y lo publiqué en http://jhonny.clubdelphi.com/?p=48


La franja horaria es GMT +2. Ahora son las 21:49:03.

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