Her er en anden clon, somarbejder med både us og eu metode:
Excel DAYS360 clone CREATE FUNCTION dbo.DATEDIFF360 ( @source DATETIME, @target DATETIME, @style BIT = 0 ) RETURNS INT AS BEGIN RETURN CASE @style -- European style WHEN 1 THEN CASE WHEN DATEPART(DAY, @target) = 31 THEN 30 ELSE DATEPART(DAY, @target) END - CASE WHEN DATEPART(DAY, @source) = 31 THEN 30 ELSE DATEPART(DAY, @source) END -- US style ELSE CASE WHEN DATEPART(DAY, @target) = 31 AND DATEPART(DAYOFYEAR, @source) = 60 AND DATEPART(MONTH, @source) = 2 THEN 30 WHEN DATEPART(DAY, @target) = 31 AND DATEPART(DAY, @source) < 30 THEN 31 WHEN DATEPART(DAY, @target) = 31 THEN 30 ELSE DATEPART(DAY, @target) END - CASE WHEN @source = DATEADD(MONTH, DATEDIFF(MONTH, -1, @source), -1) THEN 30 ELSE DATEPART(DAY, @source) END END + 30 * DATEDIFF(MONTH, @source, @target) END
Public Function DATEDIFF360(Start_Date As Date, Slut_Date As Date, EUStyle As Boolean) If EUStyle Then DAGE = DATEPART2(Slut_Date) - DATEPART2(Start_Date) Else If DatePart("D", Slut_Date) = 31 And DatePart("Y", Start_Date) = 60 And DatePart("M", Start_Date) = 2 Then DAGE = 30 ElseIf DatePart("D", Slut_Date) = 31 And DatePart("D", Start_Date) < 30 Then
DAGE = 31 Else DAGE = DATEPART2(Slut_Date) End If
If Start_Date = DateAdd("M", DateDiff("M", -1, Start_Date), -1) Then MINUSDAGE = 30 Else MINUSDAGE = DatePart("D", Start_Date) End If
DAGE = DAGE - MINUSDAGE End If
DATEDIFF360 = DAGE + 30 * DateDiff("M", Start_Date, Slut_Date) End Function
Public Function DATEPART2(xDate As Date) If DatePart("D", xDate) = 31 Then DATEPART2 = 30 Else DATEPART2 = DatePart("D", xDate) End If End Function
Sub TEST() MsgBox DATEDIFF360(#1/1/2009#, #3/21/2010#, True) End Sub
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.