In un altro post che discuteva come calcolare l'età a partire dalla data di nascita, avevo scritto che nel mio caso (SQLExpress) uso una colonna calcolata che quindi risulta aggiornata sempre, con la formula seguente
(datediff(year, [Data di nascita], getdate())
Questa formula, anche se funziona, è non del tutto corretta, in quanto non tiene conto dei giorni intercorsi dalla data di nascita, ma solo l'anno, per cui ad esempio una persona nata il 10 Dicembre 1980 risulta avere 2023-1980= 43 anni invece della età corretta, 42.
Per risolvere il problema, scartabellando in rete, pareva che la soluzione fosse a portata di mano:
DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), [date_of_birth])), '%Y') + 0;
spiegata così:
- datediff dà il numero di giorni fra le due date
- from_days converte il numero di cui sopra in data
- date_format con ‘%Y’ dà il numero di anni nella forma 00xx
- sommiamo il risultato a 0 per eliminare gli zeri superflui
La formula però non funziona con sql server, ma sospetto (come dicevo sto imparando….) che funzioni solo con MYSQL.
1) la sintassi di datediff è diversa: la data odierna appare prima di quella di nascita, e manca la keyword “year” (o "day")
2) NOW() in sql server non funziona, ci vuole getdate()
3) FROM_DAYS e DATE_FORMAT non vengono riconosciuti come funzione
Tutto questo noioso sproloquio per arrivare alla domanda: ma c'è l'equivalente Sql server di questa formula? Ho provato a lungo, ma non sono riuscito a far accettare niente a sqlserver, particolarmente FROM_DAYS sembra non avere equivalente. Per il momento, ho modificato al formula brutalmente in
(FLOOR(datediff(day, [Data di nascita], getdate()) / 365.25))
ottenendo dalla divisione il numero di anni contenuto nel numero di giorni. L'approssimazione è migliore, ma anche questa soluzione non è evidentemente corretta.