Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Procedimiento Almacenado y Fecha (https://www.clubdelphi.com/foros/showthread.php?t=78264)

rruffino 03-04-2012 14:05:00

Procedimiento Almacenado y Fecha
 
Hola a todos! Estoy haciendo un procedimiento almacenado que me saca la fecha de nacimiento de un cliente y calcula la edad del mismo entre otros datos que saco del propio cliente. El problema lo tengo cuando la fecha es nula, me retorna como que el valor es 30/12/1899. Estuve leyendo y ese valor hace referencia al valor cero de la fecha, pero asi mismo no me funciona este codigo que es donde calculo la edad:
Código SQL [-]
        if(:fecha_nacimiento is not null)then
          begin           
            tmp=CURRENT_DATE - :fecha_nacimiento;
            edad=EXTRACT(YEAR from tmp);
          end
        else
          begin
            edad=0;
          end
Agradezco si alguien me tira una mano.
Gracias y saludos!!!

Casimiro Noteví 03-04-2012 14:22:15

¿Estás seguro que la fecha es nula?, seguramente tiene puesto cero, ¿lo has comprobado?

Por cierto, estaría bien saber qué base de datos es.

rruffino 03-04-2012 14:32:42

Respondiendo
 
Hola! gracias por la respuesta, estoy usando firebird 2.1, en dialecto 3. Efectivamente cuando me fijo en la base de datos en la tabla los datos figuran como nulos y no ceros.
Saludos!

Casimiro Noteví 03-04-2012 15:08:10

Pero en el código que has puesto, el valor de fecha_nacimiento, es una variable/parámetro, eso no lo obtiene de la base de datos :confused:

rruffino 03-04-2012 17:22:01

REspuesta
 
Es uno de los varios parametros de salida que tengo en el procedimiento almacenado que estoy haciendo. El dato de fecha de nacimiento lo saco de la tabla clientes y lo paso a ese parametro.
Saludos!

Casimiro Noteví 03-04-2012 17:31:41

Y cuando es nulo, ¿qué le pasas?, ¿dónde está el código?

rruffino 03-04-2012 17:33:24

Respuesta
 
Este es el cuerpo del procedimiento:
Código SQL [-]
      
      for select id_integrante, apellido_nombre, tipo_doc, numero_documento, fecha_nacimiento,
                 inicio_vigencia, parentesco, residencia
      from INTEGRANTE_GRUPO_FAMILIAR
      where cliente=:num_cliente and
            marcado=0
      into :id_integrante, :apellido_nombre, :tipo_doc, :numero_documento,
           :fecha_nacimiento, :inicio_vigencia, :parentesco, :residencia do
      begin    
        if(fecha_nacimiento is not null)then
          begin           
            tmp=CURRENT_DATE - :fecha_nacimiento;
            edad=EXTRACT(YEAR from tmp);
          end
        else
          begin
            edad=0;
          end
        SUSPEND;

RONPABLO 03-04-2012 18:00:26

Que tal así:
Código SQL [-]
        if(coalesce(:fecha_nacimiento,'1899-12-30') > '1899-12-30')then           
       begin
             tmp=CURRENT_DATE - :fecha_nacimiento;
             edad=EXTRACT(YEAR from tmp);
       end         
      else    
      begin
             edad=0;
      end


La franja horaria es GMT +2. Ahora son las 16:20:28.

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