SQL : Funzione per calcolare l’età

Calcola l’età fornendo una data e confrontandola con la data attuale:

CREATE FUNCTION [dbo].[Age] (@birthday DATETIME)
RETURNS INT
AS
  BEGIN
      DECLARE @age INT
      DECLARE @d AS DATETIME 

      SET @d=GETDATE() 

      SELECT @age = DATEDIFF(yy, @birthday, @d) -
      --Se non ha compiuto gli anni nell'ultimo anno in corso sottrae 1 anno.
      ( CASE
			WHEN ( DATEPART(m,@birthday ) > DATEPART(m, @d) )
              OR ( DATEPART(m, @birthday ) = DATEPART(m, @d) AND DATEPART(d, @birthday) > DATEPART(d, @d) )
			THEN 1 

            ELSE 0
        END
       ) 

      RETURN( @age )
  END 

Per eseguirla :


SELECT DBO.AGE('05/02/1977')

Una variante potrebbe essere sapere che età si aveva in un anno specifico, quindi passando due parametri anzichè uno:

CREATE FUNCTION [dbo].[AgeAt] (@birthday DATETIME, @d DATETIME)
RETURNS INT
AS
  BEGIN
      DECLARE @age INT
      SELECT @age = DATEDIFF(yy, @birthday, @d) -
      --Se non ha compiuto gli anni nell'ultimo anno in corso sottrae 1 anno.
      ( CASE
			WHEN ( DATEPART(m,@birthday ) > DATEPART(m, @d) )
              OR ( DATEPART(m, @birthday ) = DATEPART(m, @d) AND DATEPART(d, @birthday) > DATEPART(d, @d) )
			THEN 1 

            ELSE 0
        END
       ) 

      RETURN( @age )
  END

E per utilizzarla semplicemente :

select dbo.AgeAt ('05/02/1977', '01/02/1998') -- risultato 21
Share

luglio 8, 2010   Posted in: Coding, Programmazione, SQL

One Response

  1. Mauro - luglio 8, 2010

    Sei proprio un genio :)

Leave a Reply

Security Code: