SQL : Funzione per calcolare l’età

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 :

1
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 :

1
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