Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SQL per calcolare eta' da data di nascita

1,538 views
Skip to first unread message

Fabi

unread,
Feb 23, 2005, 1:50:25 PM2/23/05
to
Ciao a tutti,

sto cercando (invano) il modo per ottenere delle informazioni partendo da
una data di nascita.

Vorrei in pratica ottenere le seguenti informazioni:

1- l'eta' della persona rapportata alla data odierna partendo dalla data di
nascita
(sfortunatamente la funzione DATEDIFF non e' disponibile sul mio server SQL)

2- dedurre il segno zodiacale sempre in base alla data di nascita, qualcosa
del tipo:

SELECT CASE data_nascita
WHEN intervallo 1 THEN 'Ariete'
WHEN intervallo 2 THEN 'Toro'
WHEN i3 THEN 'Gemelli'
WHEN i4 THEN 'Cancro'
WHEN i5 THEN 'Leone'
WHEN i6 THEN 'Vergine'
WHEN i7 THEN 'Bilancia'
WHEN i8 THEN 'Scorpione'
WHEN i9 THEN 'Sagittario'
WHEN i10 THEN 'Capricorno'
WHEN i11 THEN 'Acquario'
WHEN i12 THEN 'Pesci'
ELSE ''
END data_nascita
FROM mitabella

Ma anche qui non sono a trovare nulla di efficace da sostituire al posto di
"intervallo n" .
L'unica soluzione che mi viene in mente e' quella di eseguire una query
doppia per impostare "manualmente" l'anno di confronto della data allo
stesso di quello di nascita...

C'e' qualche anima pia in grado di illuminarmi ?

Grazie


Andrea Benedetti

unread,
Feb 23, 2005, 3:10:22 PM2/23/05
to
Salve Fabi,
"Fabi" <a...@me.it> ha scritto nel messaggio
news:cvir81$5as$1...@carabinieri.cs.interbusiness.it...

Su come calcolare l'età ( http://www.absistemi.it/permalink=ts90.ashx ) ,
ok:

CREATE FUNCTION dbo.uf_CalcoloEta
(@dataNascita datetime,@oggi datetime)
RETURNS int AS
BEGIN
declare @anniEta int
select @anniEta = datediff(yy, @dataNascita, @oggi) -
(case when (datepart(m, @dataNascita) > datepart(m, @oggi))OR
(datepart(m, @dataNascita) = datepart(m, @oggi) AND
datepart(d, @dataNascita) > datepart(d, @oggi))
then 1 else 0 end)
Return(@anniEta)
END

Esempio di utilizzo:
select dbo.uf_CalcoloEta('19750509', getdate()) as eta

Oppure:

CREATE FUNCTION dbo.uf_calcoloEta
(@dataNascita DATETIME,@oggi DATETIME)
RETURNS INT
AS
BEGIN
RETURN
(SELECT FLOOR (CAST (DATEDIFF (DD, @dataNascita, @oggi) AS DECIMAL (18, 7))
/ 365.25))
END

Sul secondo punto (i segni zodiacali...) potresti verificare giorno/mese
della data di nascita e verificare in quale intervallo giorno/mese dei vari
segni zodiacali si pone.

E, se mi permetti, una domanda: cosa significa "sfortunatamente la funzione
DATEDIFF non e' disponibile sul mio server SQL" ?

> Grazie
>
HTH,
Andrea


Andrea Benedetti

unread,
Feb 23, 2005, 4:58:02 PM2/23/05
to
Per completezza... anche i segni zodiacali:


declare @dataNascita datetime
set @dataNascita = '19750509'

select @dataNascita

select
case
-- Ariete
when @dataNascita between
cast(cast(year(@dataNascita) as varchar(4)) + cast('03' as varchar(2)) +
cast('20' as varchar(2)) as datetime)
and
cast(cast(year(@dataNascita) as varchar(4)) + cast('04' as varchar(2)) +
cast('20' as varchar(2)) as datetime) then 'Ariete'
-- Toro
when @dataNascita between
cast(cast(year(@dataNascita) as varchar(4)) + cast('04' as varchar(2)) +
cast('21' as varchar(2)) as datetime)
and
cast(cast(year(@dataNascita) as varchar(4)) + cast('05' as varchar(2)) +
cast('21' as varchar(2)) as datetime) then 'Toro'

-- Tutti gli altri ...

end as segnoZodiacale

HTH,
Andrea


0 new messages