2016-08-23 7 views
0

Ich bin mit Microsoft SQL Server 2012 und halten in den Fehler laufenUmgang mit NULL-Werte in DATEDIFF Berechnung

Division durch Null Fehler aufgetreten.

für die Aussage wie folgt. Ich möchte eine Null hinzufügen, wenn die beiden Daten identisch sind.

SELECT 
    sf.TotalPrice/DATEDIFF(day, sf.StartDate,sf.EndDate) as DailyAllocatedRevenue, 
    sf.TotalPrice 
FROM 
    sftable 

Antwort

2

Sie können nur die DATEDIFF in einem NULLIF wickeln:

SELECT 

    sf.TotalPrice/NULLIF(DATEDIFF(day, sf.StartDate,sf.EndDate),0) as DailyAllocatedRevenue 
    ,sf.TotalPrice 

FROM sftable 

Wenn eine der Eingaben NULL ist oder das Ergebnis 0 ist, wird es NULL und es wird durch die Division weitergeleitet.

+0

Es ist interessant, so viele Abhilfe zu sehen. – qxg

+0

@Damien, nicht wirklich sicher, dass das OP Ihre Warnung über NULL Propagation gelesen oder verstanden hat! –

+0

@PaulBambury - Ich denke, die Null-Propagation ist eigentlich ein Teil dessen, was sie wollten. Ich könnte mich irren, aber ich denke, sie wollten, dass das Gesamtergebnis (für 'DailyAllocatedRevenue')" NULL "ist, anstatt einen Fehler durch Division durch Null zu erzeugen. –

2

Verwenden NullIf Funktion in SQL-Server Wird es null zurück, wenn Differenz 0 zurück

Sehen Sie diese link helfen Ihnen

SELECT 

    sf.TotalPrice/NULLIF(DATEDIFF(day, sf.StartDate,sf.EndDate),0) as DailyAllocatedRevenue 
    ,sf.TotalPrice 

FROM sftable 
0
IIF(DATEDIFF(day, sf.StartDate,sf.EndDate)=0,NULL, sf.TotalPrice 
/Convert(Decimal(18,4),DATEDIFF(day, sf.StartDate,sf.EndDate))) 

sollte den Trick

1

Versuchen Sie und nutzen

case 
    when sd.startdate <> sd.EndDate then sf.TotalPrice/DATEDIFF(day, sf.StartDate, sf.EndDate) as DailyAllocatedRevenue 
    else sf.TotalPrice 
end