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?
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% All datediff()
does berechnet die Anzahl der Zeitraumgrenzen zwischen den Daten. Zum Beispiel
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.
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%Tags und Links sql sql-server datediff