Berechne den genauen Datumsunterschied in Jahren mit SQL

8

Ich erhalte automatisch Berichte, in denen die Daten ETL sind. Ich extrahiere und transformiere einige dieser Daten, um sie woanders zu laden. Eine Sache, die ich tun muss, ist DATEDIFF , aber das Jahr muss exakt sein (d. H. 4,6 Jahre anstatt auf fünf Jahre zu runden.

Das folgende ist mein Skript:

%Vor%

Die Spalte 'Age_In_Years' wird gerundet. Wie bekomme ich das genaue Datum in Jahren?

    
Jeff Orris 17.04.2014, 23:59
quelle

3 Antworten

9

Haben Sie versucht, stattdessen den Unterschied in Monaten zu ermitteln und dann die Jahre zu berechnen? Zum Beispiel 30 Monate / 12 wären 2,5 Jahre.

Bearbeiten: Diese SQL-Abfrage enthält mehrere Ansätze zum Berechnen des Datumsunterschieds:

%Vor%     
FumblesWithCode 18.04.2014, 00:03
quelle
9

All datediff() does berechnet die Anzahl der Zeitraumgrenzen zwischen den Daten. Zum Beispiel

%Vor%

gibt 1 zurück.

Sie erhalten ein genaueres Ergebnis, wenn Sie den Unterschied zwischen den zwei Daten in Tagen berechnen und durch die mittlere Länge eines Kalenderjahres in Tagen über einen Zeitraum von 400 Jahren (365,2425) dividieren:

%Vor%

Zum Beispiel

%Vor%

return 14.29461248 - runde es einfach auf die gewünschte Genauigkeit.

    
Nicholas Carey 18.04.2014 18:01
quelle
2

Ich denke, dass die Division durch 365,2425 kein guter Weg ist, dies zu tun. Keine Division kann dies völlig genau (mit 365.25 hat auch Probleme).

Ich weiß, dass das folgende Skript eine genaue Datumsdifferenz berechnet (obwohl es möglicherweise nicht die schnellste Methode ist):

%Vor%

Zum Vergleich:

%Vor%

Sie könnten kleine Bereiche mit Division berechnen, aber warum sollten Sie ein Risiko eingehen?

Das folgende Skript kann helfen, yeardiff-Funktionen zu testen (vertausche einfach cast (datediff (day, @ d1, @ d2) / 365.2425 als int) zu was auch immer die Funktion ist):

%Vor%     
Dmitri Rechetilov 21.04.2016 11:09
quelle

Tags und Links