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 · admin · One Comment
Posted in: Coding, Programmazione, SQL

One Response

  1. Mauro - luglio 8, 2010

    Sei proprio un genio :)

Leave a Reply