datediff arrondissement
J'ai une db table dans SQL Server qui contient une date de début pour un projet.
Web sur une page d'état, je veux vous montrer combien de jours/semaines/mois, le projet a été exécuté, les unités en fonction de la durée. Donc moins de 21 jours, je vais leur montrer de jours, de moins de 7 semaines, je vais leur montrer semaines, sinon de montrer les mois complets. Donc, je reçois les jours, les semaines et les mois des valeurs et pouvez ensuite utiliser un peu de code pour décider lequel d'affichage.
Supposons que le projet démarre le 30 Décembre 2010 et je vérifie aujourd'hui (27 Février 2011).
select datediff(d,'30 Dec 2010',getdate()) as days,
datediff(wk,'30 Dec 2010',getdate()) as weeks ,
datediff(m,'30 Dec 2010',getdate())as months
produit
days: 59 weeks: 9 months: 2
Mais en fait, la différence est de 8 semaines et certaines arrondissement prend place.
J'ai essayé de le faire dans l'ASP ainsi, l'obtention de la date de début et ensuite de faire le datediff() mais c'est pas mieux.
Est-il un meilleur moyen?
grâce
Vous devez vous connecter pour publier un commentaire.
DATEDIFF utilise la limite de la date de la partie. Donc, pour "jour", 23:59 aujourd'hui est une journée entière avant de 00:01 à demain.
Ces calculs sont le mieux est d'utiliser la même unité.
Mois est plus difficile parce que chaque mois varie. Mais vous pouvez comparer le nombre de jour (par mois) afin de corriger la valeur.
... - CASE WHEN DATEPART(day, '20101230') < DATEPART(day, getdate()) THEN 1 ELSE 0 END
Cela vous donne 8 semaines. Vous pouvez diviser par 7.0 pour obtenir des décimales. Dans ce cas, vous obtenez 8.428571
Si vous voulez un véritable calendrier de calcul des jours, des semaines et des mois, je pense que votre meilleur pari est d'utiliser NodaTime dans un personnalisé CLR fonction SQL Server.
NodaTime est un .NET port de la bibliothèque Java JodaTime. JodaTime est très complet; il prend en charge huit différents systèmes de calendrier, et même en compte les années bissextiles.
Ici est une courte introduction à JodaTime:
http://technology.amis.nl/blog/5604/introducing-joda-time-the-smart-date-api
Probablement vous copiez/collez le code pour la ronde
DATEDIFF
.MAIS ATTENDEZ UNE MINUTE!!!
Si vous besoin de quelque chose comme ceci:
Je suggère d'utiliser quelque chose comme ceci: