Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2013
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Devolver valores en SP

Buenas tardes amigos del foro,

tengo un procedimiento almacenado en firebird que me calcula la edad completa de una persona. el caso es que para ver los datos simplemente ejecuto esta instrucción:

Código SQL [-]
select * from edadcompleta('12/10/1980')

eso me devuelve 32 años, 0 meses, 25 dias.

he creado un procedimiento en SQL Server 2008
Código SQL [-]
USE [IPSSALUDSOCIAL]
GO
/****** Object:  StoredProcedure [dbo].[spEdadCompleta]    Script Date: 01/07/2013 15:57:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spEdadCompleta]
 @Fecha datetime  ,
 @Resultado varchar(250) output
 AS
 
 declare @a integer;
 declare @aa integer;
 declare @m integer;
 declare @mm integer;
 declare @d integer;
 declare @dd integer;
 declare @anio integer;
 declare @mes integer;
 declare @dia integer;
 
  
  SELECT @a = DATEPART(YEAR, @Fecha ),
  @m = DATEPART(MONTH, @Fecha),
  @d = DATEPART(day, @Fecha),
  @aa = DATEPART(year, CURRENT_TIMESTAMP),
  @mm = DATEPART(month, CURRENT_TIMESTAMP),
  @dd = DATEPART(day, CURRENT_TIMESTAMP),
  @anio = @aa - @a; 
 
  if (@m <= @mm) 
    BEGIN
      select @mes = @mm - @m;
    END
  else
    begin
      select @mes = @mm + 12 - @m;
      select @anio = @anio - 1;
    end
  if (@d <= @dd) 
    select @dia = @dd - @d;
  else
    begin
      if (@aa % 4 = 0)
        select @dia = @dd + 29 - @d;
      else
        select @dia = @dd + 28 - @d;
      select @mes = @mes - 1;
    end
  if (@mes < 0) 
    begin
      select @anio = @anio - 1;
      select @mes = @mes + 12;
    end
  if (@anio = 1) 
    select @Resultado = cast(@anio as varchar(4))+' Año, ';
  else
    select @Resultado = cast(@anio as varchar(4))+' Años, ';
    
  if (@mes = 1) 
    select @resultado = @resultado+cast(@mes as varchar(2))+' Mes, ';
  else
    select @Resultado = @Resultado+cast(@mes as varchar(2))+' Meses, ';
  if (@dia = 1) 
    select @Resultado = @Resultado+cast(@dia as varchar(2))+' Día ';
  else
    select @Resultado = @Resultado+cast(@dia as varchar(2))+' Días ';
GO

mi pregunta es: cómo recupero la edad. Al estilo de firebird.

Gracias de Antemano por vuetra ayuda.


Gustavo Cruz
Responder Con Cita
  #2  
Antiguo 08-01-2013
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
No se exactamente a que te refieres con "al estilo firebird", pero seguramente si en lugar de hacer un procedimiento, lo haces como función, vas a poder obtener el valor que estas buscando.

El procedimiento que ya tienes, solo abría que cambiarlo un poco en la sintaxis y estoy seguro que te va a funcionar.
__________________

Responder Con Cita
  #3  
Antiguo 08-01-2013
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 18
sinalocarlos Va por buen camino
ContraVeneno esta en lo correcto, por el tipo de procedimiento que estas haciendo deberias intentar con una función de tipo tabla

Código SQL [-]
ALTER FUNCTION dbo.fn_EdadCompleta (@Fecha datetime)
RETURNS @varTable TABLE (Resultado VARCHAR(20) NOT NULL)
AS 
BEGIN
--Aqui va tu codigo
INSERT INTO @varTable VALUES (@resultado)

RETURN
END

Asi podrías usarlo como mencionas :

Código SQL [-]
SELECT Resultado FROM fn_EdadCompleta('20130107') Tabla


por cierto, te recomiendo usar un formato yyyymmdd cuando mandes parametros
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
VALORES FANTASMAS FIREBIRD 2.1 valores Grandes ASAPLTDA Firebird e Interbase 17 02-12-2012 12:09:02
Devolver varios valores en una función c++ LuisMiguel C++ Builder 4 23-09-2012 04:23:47
devolver valores al form que lo llamo djanp Conexión con bases de datos 9 20-12-2007 13:36:12
devolver una cadena jmlifi Varios 5 09-08-2005 11:47:37
problema para devolver 2 valores en una funcion tiagor64 OOP 4 06-05-2005 15:38:59


La franja horaria es GMT +2. Ahora son las 01:33:22.


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