1 (anno) 1 (mese) 2 (giorni, contando anche l'ultimo)
Grazie e scusatemi ancora
datediff
"Simba883" <simb...@libero.it> ha scritto nel messaggio
news:c8lg8f$gta$1...@lacerta.tiscalinet.it...
SELECT a.Dal, a.Al,
-- se aggiungendo la differenza in anni alla data di partenza supero la data
fine allora la differenza in anni e' uguale alla datadiff - 1 altrimenti...
IIf(DateAdd("yyyy",DateDiff("yyyy",[Dal],[Al]),[dal])>[Al],
DateDiff("yyyy",[Dal],[Al])-1 , DateDiff("yyyy",[Dal],[Al])) AS Annidiff,
-- come prima solo che il risultato usa il resto della divisione per 12
IIf(DateAdd("m",DateDiff("m",[Dal],[Al]),[dal])>[Al],DateDiff("m",[Dal],[Al]
) Mod 12-1,DateDiff("m",[Dal],[Al]) Mod 12) AS Mesidiff,
-- GIORNI
esempio : 10/01/2004 - 15/10/2004
prima calcola la differenza in mesi che e' 10
poi arriva al 10/10/2004 e da qui differenza in giorni
esempio : 10/1/2004 - 05/10/2004
differenza in mesi : 10
arrivando al 10/10/2004 supero la data fine per cui riporta al mese prima
10/09/2004
calcola la differenza in giorni
IIf(DateAdd("m",DateDiff("m",[Dal],[Al]),[dal])>[Al],
DateDiff("d",DateAdd("m",DateDiff("m",[Dal],[Al])-1,[dal]),[Al]),
DateDiff("d",DateAdd("m",DateDiff("m",[Dal],[Al]),[dal]),[Al])) AS
Giornidiff
FROM tabella1 AS a
Ciao Nicola
"Nicola Ardito" <nicolanosp...@tin.it> ha scritto nel messaggio
news:UIDrc.227157$hc5.9...@news3.tin.it...
"Nicola Ardito" <nicolanosp...@tin.it> ha scritto nel messaggio
news:UIDrc.227157$hc5.9...@news3.tin.it...
> Potresti spiegarmi piů facilmente come e da dove trascrivere il tuo
codice?
Potresti invece spiegarmi tu perchč non scrivi correttamente DOPO il
quoting?
Antonio
Se stai usando il query builder in Visualizzazione Struttura devi sostituire
- "yyyy" con "aaaa"
- , (virgola) con ; (punto e virgola)
- "d" con "g"
Se invece scrivi in Visualizzazione Sql dovrebbe funzionare cosi' come e'
La ritrascrivo comunque senza commenti in linguaggio Sql ( che chiaramente
e' l'unico possibile qui)
SELECT a.Dal, a.Al,
IIf(DateAdd("yyyy",DateDiff("yyyy",[Dal],[Al]),[dal])>[Al],DateDiff("yyyy",[
Dal],[Al])-1,DateDiff("yyyy",[Dal],[Al])) AS Annidiff,
IIf(DateAdd("m",DateDiff("m",[Dal],[Al]),[dal])>[Al],DateDiff("m",[Dal],[Al]
) Mod 12-1,DateDiff("m",[Dal],[Al]) Mod 12) AS Mesidiff,
IIf(DateAdd("m",DateDiff("m",[Dal],[Al]),[dal])>[Al],DateDiff("d",DateAdd("m
",DateDiff("m",[Dal],[Al])-1,[dal]),[Al]),DateDiff("d",DateAdd("m",DateDiff(
"m",[Dal],[Al]),[dal]),[Al])) AS Giornidiff
FROM tabella1 AS a;
Ciao Nicola
PS Fai attenzione al quoting
"Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
news:yPLrc.67763$Qc.27...@twister1.libero.it...
> "thanos" <tha...@libero.it> ha scritto nel messaggio
> news:FqLrc.4606$G%.1487@tornado.fastwebnet.it...
>
> > Potresti spiegarmi più facilmente come e da dove trascrivere il tuo
> codice?
>
> Potresti invece spiegarmi tu perchè non scrivi correttamente DOPO il
> quoting?
>
> Antonio
>
>
Prova a vedere il post "Come ci si dovrebbe comportare..."
Antonio
Ho trascritto il tuo codice ...ma funziona a metà!!
se inserisco:
dal: 18/05/76
al: 16/05/77
mi restituisce:
aa mm gg
0 -1 28
invece di:
aa mm gg
0 11 29
perchè?
> Ho trascritto il tuo codice ...ma funziona a metà!!
> se inserisco:
> dal: 18/05/76
> al: 16/05/77
> mi restituisce:
> aa mm gg
> 0 -1 28
> invece di:
> aa mm gg
> 0 11 29
> perchè?
>
>
...forse ora funziona ( almeno credo).
SELECT a.Dal, a.Al,
IIf(DateAdd("yyyy",DateDiff("yyyy",[Dal],[Al]),[dal])>[Al],DateDiff("yyyy",[
Dal],[Al])-1,DateDiff("yyyy",[Dal],[Al])) AS Annidiff,
IIf(DateAdd("m",DateDiff("m",[Dal],[Al]),[dal])>[Al],IIf((DateDiff("m",[Dal]
,[Al]) Mod 12-1)<0,(DateDiff("m",[Dal],[Al]) Mod
12-1)+12,(DateDiff("m",[Dal],[Al]) Mod 12-1)),DateDiff("m",[Dal],[Al]) Mod
12) AS Mesidiff,
IIf(DateAdd("m",DateDiff("m",[Dal],[Al]),[dal])>[Al],DateDiff("d",DateAdd("m
",DateDiff("m",[Dal],[Al])-1,[dal]),[Al]),DateDiff("d",DateAdd("m",DateDiff(
"m",[Dal],[Al]),[dal]),[Al])) AS Giornidiff
FROM tabella1 AS a;
Sta diventando sempre piu' lunga ed e' praticamente illeggibile. Chiaramente
deve essere dal > al
Ciao Nicola
Un'altra domanda :
se volessi fare la somma di due date ..con gli stessi principi ...basterebbe
sostituire nel tuo codice "dateAdd" a "datediff"?
Se risolvo questi problemi ...ho fatto 13!!!
...grazie a te!!!!!!
No ho sbagliato :( volevo dire l'esatto opposto cioe' dal < al
>
> Un'altra domanda :
> se volessi fare la somma di due date ..con gli stessi principi
...basterebbe
> sostituire nel tuo codice "dateAdd" a "datediff"?
>
> Se risolvo questi problemi ...ho fatto 13!!!
> ...grazie a te!!!!!!
>
Non sono sicuro di aver capito bene: vuoi dire sommare ad una data
una cosa tipo 1 anno + 2 mesi + 3 giorni?
Ciao Nicola
Ho provato il tuo codice ..funziona alla grande( mi piacerebbe capire cosa
hai scritto!!come faccio ad imapare a fare e leggere il tuo codice?)
Per il resto ho bisogno proprio di questa cosa!!
una volta trovata la differnza fra date ...il cui risultato è
per esempio:
15(anni) 6 (mesi) 25(giorni)
e la differenza fra altre due date, il cui risultato è:
1(anno) 7(mesi) 25( giorni)
...dovrei ora sommare i due risultati:
15(anni) 6 (mesi) 25(giorni) +
1(anno) 7(mesi) 25( giorni) =
_________________________
17(anni) 2(mesi) 21(giorni, perchè devo contare
sempre l'ultimo)
...grazie ancora per il tuo prezioso aiuto..non hai idea da quanti mesi ci
stavo sbattendo la testa !!!
Ciao Ivano.
> Ho eliminato il mio ultimo post per errore..
tu puoi visualizzarlo? lo hai già visto?
[CUT]
>
> Ho provato il tuo codice ..funziona alla grande( mi piacerebbe capire cosa
> hai scritto!!come faccio ad imapare a fare e leggere il tuo codice?)
>
> Per il resto ho bisogno proprio di questa cosa!!
> una volta trovata la differnza fra date ...il cui risultato č
> per esempio:
>
> 15(anni) 6 (mesi) 25(giorni)
>
> e la differenza fra altre due date, il cui risultato č:
>
> 1(anno) 7(mesi) 25( giorni)
>
> ...dovrei ora sommare i due risultati:
>
> 15(anni) 6 (mesi) 25(giorni) +
>
> 1(anno) 7(mesi) 25( giorni) =
> _________________________
>
> 17(anni) 2(mesi) 21(giorni, perchč devo contare
> sempre l'ultimo)
>
> ...grazie ancora per il tuo prezioso aiuto..non hai idea da quanti mesi ci
> stavo sbattendo la testa !!!
>
> Ciao Ivano.
>
Premesso che non so se sul sito comune ci sia qualcosa al riguardo direi
che prima di tutto occorre stabilire quanti gg dura un mese.
Se ipotizziamo 30 allora
Dato1 : anno1,mese1,giorni1
Dato2: anno2,mese2,giorni2
Giornitot = (giorni1+giorni2+1) mod 30
MesiTot = (Mesi1+Mesi2+(giorni1+giorni2+1)\30) mod 12
AnniTot = Anno1 + Anno2 + (Mesi1+Mesi2+(giorni1+giorni2+1)/30) \12
Non l'ho provate e magari hanno bisogno di una registratina.
L'idea fondamentale e' l'uso di MOD ( resto di una divisione fra interi) e \
(divisione fra interi con risultato intero).
Ciao Nicola
> Grazie domani in ufficio la provo e ti farņ sapere.
Certo l'ideale sarebbe far capire ad access che esistono
gli anni bisestili, i mesi di 30 e quelli di 31 ma, considerata
la tollerenza di errore che posso includere .....
...se poi consideriamo che dovevo fare tutto "a mano" e aggiungerlo al
report che avevo prodotto!!!
grazie 1000
>
> > Grazie domani in ufficio la provo e ti farò sapere.
>
> Certo l'ideale sarebbe far capire ad access che esistono
> gli anni bisestili, i mesi di 30 e quelli di 31 ma, considerata
> la tollerenza di errore che posso includere .....
>
> ...se poi consideriamo che dovevo fare tutto "a mano" e aggiungerlo al
> report che avevo prodotto!!!
>
> grazie 1000
>
>
Se traduci le differenze di date in qualcosa tipo
1anno + 3mesi + 20 giorni mi pare evidente che da qui sia impossibile
stabilire se l'intervallo copra anni bisestili, mesi con 31 giorni...
Forse se tu indicassi esattamente come sono fatti i dati che tratti e quale
e' il risultato che vorresti ottenere si potrebbe cercare un sistema
'perfetto'
Ciao Nicola
beh devo dirti che la cosa è presto detta!!
se ho due date:
01/01/98
02/05/06
access "dovrebbe capire" che 1 anno è formato da 365 giorni di cui 12 mesi
divisi come sappiamo in mesi di 30 e 31 e che ogni 4 anni c'è l'anno
bisestile
la differenza fra le due date come dici tu nel tuo esempio
(1 anno +3 mesi+20gg) dovrebbe capire il calendario
e aggiungere o togliere i gg mm aa a seconda dei mesi dell'anno...sbaglio?
access non riesce a fare somma e diffferenza tenendo conto del calendario?
[cut]
>beh devo dirti che la cosa è presto detta!!
>se ho due date:
>01/01/98
>02/05/06
>access "dovrebbe capire" che 1 anno è formato da 365 giorni di cui 12 mesi
>divisi come sappiamo in mesi di 30 e 31 e che ogni 4 anni c'è l'anno
>bisestile
>la differenza fra le due date come dici tu nel tuo esempio
>(1 anno +3 mesi+20gg) dovrebbe capire il calendario
>e aggiungere o togliere i gg mm aa a seconda dei mesi dell'anno...sbaglio?
>access non riesce a fare somma e diffferenza tenendo conto del calendario?
È solo un abbozzo: se l'idea ti piace vedi magari se puoi smagrare un
po' il codice ...
-----------------
Private Type ThanosDifferenza
ThGiorni As Long
ThMesi As Long
ThAnni As Long
End Type
Private Function ThDifferenza(ByVal dtmDataIni As Date, ByVal _
dtmDataFin As Date) As ThanosDifferenza
Dim dtmDataTmp As Date
ThDifferenza.ThAnni = DateDiff("yyyy", dtmDataIni, _
dtmDataFin)
If DateAdd("yyyy", ThDifferenza.ThAnni, dtmDataIni) _
> dtmDataFin Then
ThDifferenza.ThAnni = ThDifferenza.ThAnni - 1
End If
dtmDataIni = DateAdd("yyyy", ThDifferenza.ThAnni, _
dtmDataIni)
ThDifferenza.ThMesi = DateDiff("m", dtmDataIni, _
dtmDataFin)
If DateAdd("m", ThDifferenza.ThMesi, dtmDataIni) _
> dtmDataFin Then
ThDifferenza.ThMesi = ThDifferenza.ThMesi - 1
End If
dtmDataIni = DateAdd("m", ThDifferenza.ThMesi, _
dtmDataIni)
ThDifferenza.ThGiorni = DateDiff("d", dtmDataIni, _
dtmDataFin)
End Function
-----------------
Ciao
--
Alberto
No alle guerre
GRAZIE Lo proverò subito e ti farò sapere ma il risultato di questo codice
mi serve diviso in tre campi(aa,mm,gg)perchè devo inserire i campi
sopracitati in un report dove poter sommare o togliere (anni,mesi o giorni)
Grazie Ivano.
[Inizio]
...dovrei ora sommare i due risultati:
15(anni) 6 (mesi) 25(giorni) +
1(anno) 7(mesi) 25( giorni) =
_________________________
17(anni) 2(mesi) 21(giorni, perchè devo contare
sempre l'ultimo)
[Fine richiesta]
Quello che intendevo e' che l'informazione sulle date non e' piu'
sufficiente per determinare cose tipo
quelle che indichi nel messaggio( anno bisestile? mese di 30,31,28,29 ? ...)
Se vuoi si deve ripartire dalle quattro date
dal1,al1
dal2,al2
ma a questo punto ti chiedo: cosa significa fare la somma?
Ciao Nicola
PS volevo anche aggiungere che access nelle funzioni di manipolazione delle
date considera gli
anni bisestili, il numero di giorni dei mesi ...
Io ho un report in cui devo indicare:
- data di arruolamento
- servizio militare [eventualmente svolto, espresso in
aa,mm,gg (ovvero.. ho fatto 1 anno e 6
mesi ..come nel linguaggio parlato)]
devo sommare queste date perchè se arrivo ad un totale di 17 anni ho diritto
(16anni 6 mesi 1 giorno si
arrotondano a 17) ho diritto ad un "nastrino".
Lo stesso quando maturo i 29 anni.
Però a questi risultati devo detrarre eventuali periodi in cui sono stato
malato, ricoverato, aspettativa.....quindi se arrivo a 17 ma ho fatto 6 mesi
e 29 giorni di "assenza" dovrò togliere questo periodo e avrò maturato solo:
16 anni 5 mesi e 2 giorni(conto sempre il giorno di partenza)
Ho reso l'idea?
...poi avrei un'altra domanda da 1.000.000 di dollari da farti?..posso in un
report strutturato a nido d'ape infilare il risultato di una dozzina di
query?
ciao
Ivano
Forse stiamo andando un po' OT sul primo argomento: se vuoi possiamo
continuare in privato
rimuovi nospamxx dal mio indirizzo
[grandissimo-cut]
>GRAZIE Lo proverò subito e ti farò sapere ma il risultato di questo codice
>mi serve diviso in tre campi(aa,mm,gg)
e non è giusto quello che il mio codice fa?
>perchè devo inserire i campi
>sopracitati in un report dove poter sommare o togliere (anni,mesi o giorni)
>Grazie Ivano.
Ciao