Calculer la date exacte de la différence dans les années à l'aide de SQL
Je reçois des rapports dans lesquels les données sont ETL
à la base de données automatiquement. Je extraire et transformer des données à charger quelque part d'autre. Une chose dont j'ai besoin est un DATEDIFF
mais l'année doit être exact (c'est à dire, de 4,6 ans au lieu de l'arrondissement jusqu'à cinq ans.
Voici mon script:
select *, DATEDIFF (yy, Begin_date, GETDATE()) AS 'Age in Years'
from Report_Stage;
La 'Age_In_Years'
colonne est arrondi. Comment puis-je obtenir la date exacte dans les années?
Si vous avez juste besoin d'un chiffre significatif, essayez DATEDIFF (jj.. et diviser par 365. Ce ne sera pas le facteur dans les années bissextiles.
que ne ferait que rendre par comme ,1 +-.1-elle correcte?
il est toujours arrondi quand je le fais de cette façon
Essayez de diviser par 365.0 au lieu de 365, qui permet d'arrêter l'implicite exprimées en nombre entier.
Qui a fait le tour. Merci.
que ne ferait que rendre par comme ,1 +-.1-elle correcte?
il est toujours arrondi quand je le fais de cette façon
Essayez de diviser par 365.0 au lieu de 365, qui permet d'arrêter l'implicite exprimées en nombre entier.
Qui a fait le tour. Merci.
OriginalL'auteur Squ1rr3lz | 2014-04-17
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de faire la différence en mois au lieu de cela, puis à calculer les années de cette façon? Par exemple, 30 mois /12 serait de 2,5 ans.
Edit: Cette requête SQL contient plusieurs approches pour calculer la date de différence:
ainsi fait-il répondre à votre question ou pas? Votre acceptation implique une chose, mais votre commentaire l'autre. Il est probable que tronquer en raison de la mathématique être effectuées uniquement comme des entiers (c'est à dire, il devrait être
/ 12.0
à force de mathématiques à virgule flottante, comme dans les commentaires sur votre question). @Cherchait - vous devez être l'ajout de code correspondant à des réponses comme ceci, ou cela devrait être fermé.Ajout d'un code exemple de réponse originale à cette question.
il a répondu à ma question.
Il y a un problème d'arrondi avec
DATEDIFF(MONTH, @start, @end) / 12.0
lorsque les deux dates sont sur le même mois et le jour de départ est plus grand.OriginalL'auteur FumblesWithCode
Tous
datediff()
n'est calculer le nombre de période de frontières franchies entre les dates. Par exemplerenvoie 1.
Vous obtiendrez un résultat plus précis, si vous calculez la différence entre les deux dates en jours et la diviser par la longueur moyenne d'une année civile, jours, plus de 400 ans (365.2425):
Par exemple,
retour
14.29461248
— il à la précision souhaitée.OriginalL'auteur Nicholas Carey
Je pense que la division par 365.2425 n'est pas une bonne façon de le faire. Pas de division peut à présent complètement avec précision (à l'aide de 365.25 a aussi des problèmes).
Je sais que le script suivant calcule une date précise de la différence (mais peut-être pas la plus rapide):
Pour la comparaison:
Vous pourriez être en mesure de calculer des petites plages de division, mais pourquoi prendre une chance??
Le script suivant peut aider à tester yeardiff fonctions (il suffit de l'échanger cast(datediff(jour,@d1,@d2) /365.2425 comme int) à ce que la fonction est):
OriginalL'auteur Dmitri Rechetilov
J'ai trouvé une meilleure solution. De ce fait l'hypothèse que la première date est inférieure ou égale à la deuxième date.
OriginalL'auteur K'Dubb