2016-07-25 21 views
0

Ich würde gerne den Datumsunterschied in 00-00-00 00:00:00 bekommen, wenn ich 2 Daten subtrahieren, aber das Ergebnis bekomme ich immer mit 1900 beginnt -01-01.Wie bekomme ich ein Datum Ergebnis durch Subtrahieren eines Datums von einem anderen

Wie bekomme ich dies nur die Daten und die verbleibende Zeit anzuzeigen. oder sogar Wert unter Angabe (X) Tage (X) Stunden (X) Minuten

SELECT TOP 
    [Open_Date] 
    ,[Close_Date] 
    ,([Open_Date]-[Close_Date]) as [test] 
    ,[time_spent_sum] 
    ,[support_lev] 
    ,[Priority] 
    ,[CountCases] 
    ,[Last_Update_Status] 
    ,[Last_Update_Date] 
    ,[Customer Group] 
    ,[Assignee Group] 
    ,[3rd_Party] 
    ,[rootcause] 
    ,[location_name] 
    ,[Dataline] 
    ,[InterfaceID] 
    ,[DAYS OPEN] 
    FROM [mdb].[dbo].[ReportsView] 

Ich habe um einige Konvertiten wurde durcheinander, aber nicht die gewünschte Wirkung zu bekommen.

case 
    when [Close_Date] is null then format(convert(smalldatetime, dateadd(minute, (datediff(minute,[Open_Date],getdate())), ''), 114),'d ''days'' HH ''Hrs'' :mm ''Mins'' ') 
    when [Close_Date] is not null then format(convert(smalldatetime, dateadd(minute, (datediff(minute,[Open_Date],[Close_Date])), 0), 114),'d ''days'' HH ''Hrs'' :mm ''Mins'' ') 
    else null 
    end as [Total_call_open_time] 

DATES

+1

Siehe DATEDIFF Funktion – Serg

+0

Welche DBMS verwenden Sie? Sie alle unterstützen "DATE ​​ARITHMETIC" aber mit unterschiedlichen Funktionsnamen und Syntax. – FDavidov

+0

Hallo ich benutze SQL Server 2016 – Jay

Antwort

0

Um genauer die Anzahl der Tage/Stunden/Minuten/Sekunden zwischen zwei Zeitperioden Sie die aktuelle Zeit zwischen den beiden Daten finden müssen darstellen, wie datediff sagt Ihnen eigentlich, wie viele Grenzen überschreiten Sie.

Zum Beispiel die beiden folgenden einen Wert von 1 selbst zurückkehren, obwohl fast 48 Stunden Unterschied in den beiden Perioden ist:

select datediff(day,'2000-01-01 00:00:01','2000-01-02 23:59:59') 
select datediff(day,'2000-01-01 23:59:59','2000-01-02 00:00:01') 

Als solche wird folgendes tun, was Sie brauchen, um es zu verwenden div / und mod % zum Gesamtzeitspannen zu berechnen und etwas übrig:

declare @d1 datetime = dateadd(day,-1,dateadd(hour,-2,dateadd(minute,-3,dateadd(second,-4,getdate())))) 
declare @d2 datetime = getdate() 

select datediff(hour,@d1,@d2)/24 as Days 
     ,datediff(minute,@d1,@d2)/60%24 as Hours 
     ,datediff(second,@d1,@d2)/60%60 as Minutes 
     ,datediff(second,@d1,@d2)%60%60 as Seconds 

     ,cast(datediff(hour,@d1,@d2)/24 as nvarchar(3)) + case when cast(datediff(day,@d1,@d2) as nvarchar(3)) = 1 then ' Day, ' else ' Days, ' end 
     + cast(datediff(minute,@d1,@d2)/60%24 as nvarchar(3)) + case when cast(datediff(hour,@d1,@d2)%24 as nvarchar(3)) = 1 then ' Hour, ' else ' Hours, ' end 
     + cast(datediff(second,@d1,@d2)/60%60 as nvarchar(3)) + case when cast(datediff(Minute,@d1,@d2)%60 as nvarchar(3)) = 1 then ' Minute, ' else ' Minutes, ' end 
     + cast(datediff(Second,@d1,@d2)%60%60 as nvarchar(3)) + case when cast(datediff(Second,@d1,@d2)%60%60 as nvarchar(3)) = 1 then ' Second' else ' Seconds' end as TimeDifference 
+0

Danke, das war perfekt! – Jay