2010-06-27 7 views
1

Disons que j'ai deux dates dans ma table, DueDate et PaidDate. Ce que je dois faire est de calculer la différence entre ces deux dates. Toutefois, si le DateDiff() retourne moins de 0, il doit montrer 0.Différence de date dans SQL Server 2005

DateDiff (Jour, 0, (PaidDate-DueDate-1)) comme DelayDays

devrait afficher 0 pour quoi que ce soit moins de 1.

Merci.

Répondre

4

Tout d'abord, ce n'est pas comme ça que vous utilisez DateDiff. Voici comment l'utiliser:

DateDiff(Day, PaidDate, DueDate) 

Pour obtenir une valeur nulle, il suffit de comparer les dates:

case when PaidDate > DueDate then 0 else DateDiff(Day, PaidDate, DueDate) end 

(Je ne sais pas cependant quelle date vous voulez être normalement plus tard un, c'est-à-dire si vous voulez calculer le temps restant ou le temps écoulé, vous aurez peut-être besoin de les échanger.) Comme il se trouve maintenant, il calcule le temps restant.)

+0

Oh wow, merci pour votre aide Guffa. – Rabin

+0

J'ai lu quelque part que faire DateDiff (Day, 0, PaidDate-DueDate) donne une meilleure précision. Et le -1 dans DueDate est juste parce que je n'ai pas besoin de calculer pour le jour du paiement, c'est-à-dire calculer jusqu'à la veille du jour du paiement. Encore une fois merci. – Rabin

+0

@Rabin: Si vous (utilisez) DateDiff de cette façon, cela ne vous donnera qu'une meilleure précision si vous avez aussi un composant temps que vous voulez prendre en compte, c'est à dire la différence entre '2010-06-27 23:00' et '2010 -06-28 01:00 'serait égal à zéro car il est inférieur à 24 heures, alors que DateDiff donnerait un résultat car il s'agit de dates différentes. Donc, c'est seulement plus précis si c'est le résultat que vous voulez. Cependant, si vous voulez une résolution plus élevée, utilisez simplement une unité plus petite que 'day' au lieu d'utiliser DateDiff simplement comme un moyen d'arrondir un nombre. – Guffa

1
case when DateDiff(Day, 0, (PaidDate-DueDate-1)) <0 then 0 else 
DateDiff(Day, 0, (PaidDate-DueDate-1)) end 
+0

Puisque cela fait deux fois le même calcul, je pense que la solution de Guffa me convient un peu mieux. Merci pour ton aide. – Rabin