Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-07-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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???
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #2  
Antiguo 04-07-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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;
Responder Con Cita
  #3  
Antiguo 04-07-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
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 .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 04-07-2008 a las 15:11:37. Razón: Cambiar el ejemplo a un Insert...
Responder Con Cita
  #4  
Antiguo 04-07-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
gracias a los dos, voy a ponerlo en practica a ver que tal
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 04-07-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #6  
Antiguo 04-07-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Lightbulb

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.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #7  
Antiguo 04-07-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por RolphyReyes Ver Mensaje
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 .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #8  
Antiguo 05-07-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por jhonny Ver Mensaje
...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.
Responder Con Cita
  #9  
Antiguo 05-07-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Al González Ver Mensaje
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.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #10  
Antiguo 23-10-2008
Avatar de maxid
maxid maxid is offline
Miembro
 
Registrado: ene 2006
Posts: 38
Poder: 0
maxid Va por buen camino
Thumbs up 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
__________________
Maestro no solo es el que conoce sino el que comparte lo que sabe.
Responder Con Cita
  #11  
Antiguo 23-10-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
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
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Rellenar con ceros (0) egarc SQL 5 08-10-2012 08:42:21
Ceros desaparecidos en decimales. Edgtho Conexión con bases de datos 12 04-06-2008 10:00:37
Agregar Ceros a la Izquierda en Firebird 1.5.x mantrax Firebird e Interbase 2 06-10-2007 19:24:35
NULL por Ceros en Interbase BuenaOnda Conexión con bases de datos 3 14-06-2007 11:31:20
Ceros antes de un numero MRSAM Varios 2 24-11-2004 03:24:08


La franja horaria es GMT +2. Ahora son las 15:43:59.


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
Copyright 1996-2007 Club Delphi