Ich habe zwei Spalten:
job_start job_end
2011-11-02 12:20:37.247 2011-11-02 13:35:14.613
Wie wäre es möglich, mithilfe von T-SQL die ungefähre Zeit zu ermitteln, die zwischen dem Start des Jobs und dem Ende des Jobs vergangen ist?
Ich habe es versucht:
select (job_end - job_start) from tableA
aber am Ende mit diesem:
1900-01-01 01:14:37.367
sql
sql-server-2005
date
datediff
some_bloody_fool
quelle
quelle
DateTime
Subtraktion ein anderes Datum, das 1900.01.01 plus der resultierenden Differenz entspricht, die in Ihrem Fall 1: 14: 37.367 beträgt .Antworten:
Schauen Sie sich die
DateDiff()
Funktion an.-- Syntax -- DATEDIFF ( datepart , startdate , enddate ) -- Example usage SELECT DATEDIFF(DAY, GETDATE(), GETDATE() + 1) AS DayDiff SELECT DATEDIFF(MINUTE, GETDATE(), GETDATE() + 1) AS MinuteDiff SELECT DATEDIFF(SECOND, GETDATE(), GETDATE() + 1) AS SecondDiff SELECT DATEDIFF(WEEK, GETDATE(), GETDATE() + 1) AS WeekDiff SELECT DATEDIFF(HOUR, GETDATE(), GETDATE() + 1) AS HourDiff ...
Sie können es hier in Aktion sehen / damit spielen
quelle
Mit der DATEDIFF- Funktion können Sie die Differenz in Minuten, Sekunden, Tagen usw. ermitteln.
SELECT DATEDIFF(MINUTE,job_start,job_end)
MINUTE gibt natürlich die Differenz in Minuten zurück. Sie können auch DAY, HOUR, SECOND, YEAR verwenden (die vollständige Liste finden Sie im Online-Link der Bücher).
Wenn Sie Lust haben, können Sie dies anders anzeigen, zum Beispiel könnten 75 Minuten wie folgt angezeigt werden: 01: 15: 00: 0
Hier ist der Code dafür für SQL Server 2005 und 2008
-- SQL Server 2005 SELECT CONVERT(VARCHAR(10),DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000'),114) -- SQL Server 2008 SELECT CAST(DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000') AS TIME)
quelle
Wirf das Ergebnis als
TIME
und das Ergebnis wird für die Dauer des Intervalls im Zeitformat sein.select CAST(job_end - job_start) AS TIME(0)) from tableA
quelle
Ich denke, Sie brauchen die Zeitlücke zwischen job_start & job_end .
Versuche dies...
select SUBSTRING(CONVERT(VARCHAR(20),(job_end - job_start),120),12,8) from tableA
Ich bin damit gelandet.
quelle
Geben Sie das Start- und Enddatum an
DECLARE @SDATE AS DATETIME
TART_DATE AS DATETIME DECLARE @END_-- Set Start and End date SET @START_DATE = GETDATE() SET @END_DATE = DATEADD(SECOND, 3910, GETDATE())
- Holen Sie sich das Ergebnis im Format HH: MI: SS: MMM (24H)
SELECT CONVERT(VARCHAR(12), DATEADD(MS, DATEDIFF(MS, @START_DATE, @END_DATE), 0), 114) AS TimeDiff
quelle
Versuchen Sie dies in SQL Server
SELECT start_date as firstdate,end_date as seconddate ,cast(datediff(MI,start_date,end_date)as decimal(10,3)) as minutediff ,cast(cast(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) as int ) as varchar(10)) + ' ' + 'Days' + ' ' + cast(cast((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) - floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)) ) * 24 as int) as varchar(10)) + ':' + cast( cast(((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) - floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)))*24 - cast(floor((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) - floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)))*24) as decimal)) * 60 as int) as varchar(10)) FROM [AdventureWorks2012].dbo.learndate
quelle
Wenn Ihre Datenbank
StartTime = 07:00:00
und Endzeit =14:00:00
und beide vom Zeittyp sind. Ihre Anfrage, um den Zeitunterschied zu erhalten, wäre:SELECT TIMEDIFF(Time(endtime ), Time(StartTime )) from tbl_name
Wenn Ihre Datenbank startDate =
2014-07-20 07:00:00
und endtime = ist2014-07-20 23:00:00
, können Sie diese Abfrage auch verwenden.quelle
TIMEDIFF
Funktion?Der folgende Code gibt im Format hh: mm an.
Wählen Sie RECHTS (LINKS (job_end- job_start, 17), 5).
quelle
Schauen Sie sich DATEDIFF an , das sollte genau das sein, wonach Sie suchen. Es werden die beiden Daten verwendet, die Sie vergleichen, und die Datumseinheit, in der Sie die Differenz wünschen (Tage, Monate, Sekunden ...).
quelle
Ich habe folgende Logik verwendet und es hat bei mir wie ein Wunder funktioniert:
quelle
Wenn Sie versuchen, mit einer gewissen Genauigkeit Arbeitsstunden zu erhalten, versuchen Sie dies (getestet in SQL Server 2016).
SELECT DATEDIFF(MINUTE,job_start, job_end)/60.00;
Verschiedene DATEDIFF-Funktionen sind:
SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); SELECT DATEDIFF(quarter, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); SELECT DATEDIFF(month, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); SELECT DATEDIFF(dayofyear, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); SELECT DATEDIFF(day, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); SELECT DATEDIFF(week, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); SELECT DATEDIFF(hour, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); SELECT DATEDIFF(minute, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); SELECT DATEDIFF(second, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
Ref: https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017
quelle