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

Calcolo età assicurativa

365 views
Skip to first unread message

Dario

unread,
May 16, 2008, 4:22:01 AM5/16/08
to
Ciao,
sono poco esperto di access, vi espongo il mio problema sperando in un
consiglio:
ho due campi che rappresentano date in fomato aaaammgg (data di nascita e
data attuale). Non ho problemi a ricavarmi eventualmente l'anno o il mese..ma
a me servirebbe di calcolare l'età attuale della persona, (cioè data attuale
- data nascita) considerando che se per esmpio ha 35 anni e 5 mesi, devo
arrotondara a 35, mentre se ha 35 anni e 6 mesi, devo arrotondare a 36.

grazie mille!

Maurizio Borrelli

unread,
May 16, 2008, 5:32:28 AM5/16/08
to
"Dario" wrote in message
news:75BBF8C7-C96A-4A4A...@microsoft.com:

> ho due campi che rappresentano date in fomato aaaammgg (data di nascita e
> data attuale). Non ho problemi a ricavarmi eventualmente l'anno o il mese..ma
> a me servirebbe di calcolare l'età attuale della persona, (cioè data attuale
> - data nascita) considerando che se per esmpio ha 35 anni e 5 mesi, devo
> arrotondara a 35, mentre se ha 35 anni e 6 mesi, devo arrotondare a 36.

Ciao Dario.

Se i due campi (ma perche' due?) fossero di tipo Data/ora, allora se non
sbaglio un modo potrebbe essere il seguente:

EtaAssicurativa:
Year([T].[DataOdierna])-Year([T].[DataNascita])+Abs(DateSerial(Year([T].[DataOdierna]);Month([T].[DataNascita])-6;Day([T].[DataNascita])-1)<[T].[DataOdierna])-1

Se non fossero di tipo Data/ora... dicci di che tipo sono (*tipo*, non
*formato*).

(Facci sapere se e eventualmente come hai risolto. Grazie!)

--
Maurizio Borrelli [Microsoft MVP Office System]
http://www.riolab.org/

Mimeacc

unread,
May 16, 2008, 5:38:14 AM5/16/08
to

"Dario" <Da...@discussions.microsoft.com> ha scritto nel messaggio
news:75BBF8C7-C96A-4A4A...@microsoft.com...

Ciao Dario, potresti fare una cosa del genere

IIf
((Month(date())-Month(datadinascita))<6;Year(date())-Year(datadinascita);Year(date())-Year(datadinascita)+1)

Fammi sapere.
Mimeacc

Giò

unread,
May 16, 2008, 6:10:02 AM5/16/08
to
prova cosi'
SELECT TuaTabellaDate.DataNascita,
DateDiff("m",TuaTabellaDate.DataNascita,Date()) AS diff_mesi,
DateSerial(Year(Date()),Month(TuaTabellaDate.DataNascita),Day(TuaTabellaDate.DataNascita))
AS compleanno, (DateAdd("yyyy",-1,compleanno)) AS compleanno1, iif(compleanno
<
date(),(datediff("m",date(),compleanno))*-1,datediff("m",compleanno1,date()))
AS mesi_calcolo, iif(mesi_calcolo>=6,(Int(diff_mesi/12))+1,Int(diff_mesi/12))
AS anni, iif(mesi_calcolo>=6,0,mesi_calcolo) AS mesi
FROM TuaTabellaDate;

ciao
--
\\\|///
\\ - - //
( @ @ )
oOOO-- (_) --OOOo
----------------------------------

"Mimeacc" ha scritto:

Dario

unread,
May 16, 2008, 10:24:00 AM5/16/08
to
Ciao a tutti,

"Maurizio Borrelli" ha scritto:

Allora, i campi (che sono 2 perke cosi mi passano il db....;-)) hanno
formato testo, esempio:

31/12/2007 è rappresentanto nel campo con 20071231.

Vi ringrazio per i suggerimenti, ma alla fine ho risolto cosi:
Faccio la differenza tra l'anno della data attuale e l'anno della data di
nascita (utilizzo la "left" per entrambi i campi. Poi, aggiungo 1 o 0 a
seconda che il valore assoluto della differenza dei mesi delle due date
(ottenuta con "left"&"right") sia > 6.

In pratica:

Età_Assicurativa: Left([Data riserva];4)-Left([data
nascita];4)+IIf(Abs(Right(Left([Data riserva];6);2)-Right(Left([data
nascita];6);2))<=5;0;1).

grazie di nuovo

Maurizio Borrelli

unread,
May 16, 2008, 1:28:19 PM5/16/08
to
"Dario" wrote in message
news:C7C1C254-23A9-4779...@microsoft.com:
> "Maurizio Borrelli" ha scritto:

Ciao Dario.

> > > ho due campi che rappresentano date in fomato aaaammgg (data di nascita e
> > > data attuale). Non ho problemi a ricavarmi eventualmente l'anno o il mese..ma
> > > a me servirebbe di calcolare l'età attuale della persona, (cioè data attuale
> > > - data nascita) considerando che se per esmpio ha 35 anni e 5 mesi, devo
> > > arrotondara a 35, mentre se ha 35 anni e 6 mesi, devo arrotondare a 36.

> > Se i due campi [...] fossero di tipo Data/ora, allora se non


> > sbaglio un modo potrebbe essere il seguente:
> > EtaAssicurativa:
> > Year([T].[DataOdierna])-Year([T].[DataNascita])+Abs(DateSerial(Year([T].[DataOdierna]);Month([T].[DataNascita])-6;Day([T].[DataNascita])-1)<[T].[DataOdierna])-1

> Allora, i campi [...] hanno formato testo,

Dunque assumiamo che siano di tipo Testo. Ok.

> esempio:
> 31/12/2007 è rappresentanto nel campo con 20071231.
> Vi ringrazio per i suggerimenti, ma alla fine ho risolto cosi:
> Faccio la differenza tra l'anno della data attuale e l'anno della data di
> nascita (utilizzo la "left" per entrambi i campi. Poi, aggiungo 1 o 0 a
> seconda che il valore assoluto della differenza dei mesi delle due date
> (ottenuta con "left"&"right") sia > 6.
> In pratica:
> Età_Assicurativa: Left([Data riserva];4)-Left([data
> nascita];4)+IIf(Abs(Right(Left([Data riserva];6);2)-Right(Left([data
> nascita];6);2))<=5;0;1).
> grazie di nuovo

Grazie a te del riscontro. Pero'...

Considera che secondo la tua formula un bambino nato il 17 novembre
dell`anno scorso avrebbe oggi, 16 maggio 2008, due anni.

La formula da me proposta, considerando il tipo Testo, risulterebbe:

Year(Format([dr];"0000-00-00"))-Year(Format([dn];"0000-00-00"))+Abs(DateSerial(Year(DateValue(Format([dr];"0000-00-00")));Month(DateValue(Format([dn];"0000-00-00")))-6;Day(DateValue(Format([dn];"0000-00-00")))-1)<(DateValue(Format([dr];"0000-00-00"))))-1

e il bambino di prima avrebbe zero anni.

Ne avrebbe invece uno per Mimeacc (ciao!), se ho convertito
correttamente la formula da lui proposta:

IIf((Month(Format([dr];"0000-00-00"))-Month(Format([dn];"0000-00-00")))<6;Year(Format([dr];"0000-00-00"))-Year(Format([dn];"0000-00-00"));Year(Format([dr];"0000-00-00"))-Year(Format([dn];"0000-00-00"))+1)

Dario

unread,
May 19, 2008, 4:22:02 AM5/19/08
to

"Maurizio Borrelli" ha scritto:

> Grazie a te del riscontro. Pero'...
>
> Considera che secondo la tua formula un bambino nato il 17 novembre
> dell`anno scorso avrebbe oggi, 16 maggio 2008, due anni.
>
> La formula da me proposta, considerando il tipo Testo, risulterebbe:
>
> Year(Format([dr];"0000-00-00"))-Year(Format([dn];"0000-00-00"))+Abs(DateSerial(Year(DateValue(Format([dr];"0000-00-00")));Month(DateValue(Format([dn];"0000-00-00")))-6;Day(DateValue(Format([dn];"0000-00-00")))-1)<(DateValue(Format([dr];"0000-00-00"))))-1
>
> e il bambino di prima avrebbe zero anni.
>
> Ne avrebbe invece uno per Mimeacc (ciao!), se ho convertito
> correttamente la formula da lui proposta:
>
> IIf((Month(Format([dr];"0000-00-00"))-Month(Format([dn];"0000-00-00")))<6;Year(Format([dr];"0000-00-00"))-Year(Format([dn];"0000-00-00"));Year(Format([dr];"0000-00-00"))-Year(Format([dn];"0000-00-00"))+1)
>
> --
> Maurizio Borrelli [Microsoft MVP Office System]
> http://www.riolab.org/
>
>

Cavolo hai ragione!!!!!
Grazie per avermi fatto notare la cosa, ora modifoc la formula.

Grazie ancora.

0 new messages