J'ai deux colonnes:
job_start job_end
2011-11-02 12:20:37.247 2011-11-02 13:35:14.613
Comment serait-il possible d’utiliser T-SQL pour trouver le temps brut qui s’est écoulé entre le début et la fin du travail du travail?
J'ai essayé ceci:
select (job_end - job_start) from tableA
mais a fini avec ceci:
1900-01-01 01:14:37.367
Examinez la fonction DateDiff()
.
-- 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
...
Vous pouvez le voir en action/ jouez avec cela ici
Vous pouvez utiliser la fonction DATIFF pour obtenir la différence en minutes, secondes, jours, etc.
SELECT DATEDIFF(MINUTE,job_start,job_end)
MINUTE renvoie évidemment la différence en minutes, vous pouvez également utiliser JOUR, HEURE, DEUXIÈME, ANNÉE (voir le lien en ligne des livres pour la liste complète).
Si vous voulez avoir envie, vous pouvez afficher ceci différemment. Par exemple, 75 minutes peuvent être affichées comme suit: 01: 15: 00: 0
Voici le code pour le faire pour SQL Server 2005 et 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)
Convertissez le résultat en TIME
et le résultat sera au format heure pour la durée de l'intervalle.
select CAST(job_end - job_start) AS TIME(0)) from tableA
Je pense que vous avez besoin de l’écart de temps entre job_start & job_end .
Essaye ça...
select SUBSTRING(CONVERT(VARCHAR(20),(job_end - job_start),120),12,8) from tableA
J'ai fini avec ça.
01:14:37
Déclarer les dates de début et de fin 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())
- Obtenir le résultat au format HH: MI: SS: MMM (24H) SELECT CONVERT(VARCHAR(12), DATEADD(MS, DATEDIFF(MS, @START_DATE, @END_DATE), 0), 114) AS TimeDiff
Le code ci-dessous donne au format hh: mm.
sélectionnez RIGHT (LEFT (job_end- job_start, 17), 5)
Jetez un coup d’œil à DATEIFF , c’est ce que vous cherchez. Il prend les deux dates que vous comparez, et l'unité de date dans laquelle vous voulez la différence (jours, mois, secondes ...)
Essayez ceci dans 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
J'ai utilisé la logique suivante et cela a fonctionné pour moi comme une merveille:
CONVERT(TIME, DATEADD(MINUTE, DATEDIFF(MINUTE, AP.Time_IN, AP.Time_OUT), 0))
Si vous essayez de travailler les heures avec une certaine précision, essayez ceci (testé dans SQL Server 2016)
SELECT DATEDIFF(MINUTE,job_start, job_end)/60.00;
Les différentes fonctionnalités de DATEDIFF sont:
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');
Réf.: https://docs.Microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017
Si votre base de données StartTime = 07:00:00
et endtime = 14:00:00
et que les deux sont de type heure. Votre requête pour obtenir le décalage horaire serait:
SELECT TIMEDIFF(Time(endtime ), Time(StartTime )) from tbl_name
Si votre base de données startDate = 2014-07-20 07:00:00
et endtime = 2014-07-20 23:00:00
, vous pouvez également utiliser cette requête.