web-dev-qa-db-fra.com

Comment comparer deux dates pour trouver le décalage horaire dans SQL Server 2005, manipulation de la date

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
71
some_bloody_fool

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

121
James Hill

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)
19
Vince Pergolizzi

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
12
Ric

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
5

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

2
user6474160

Le code ci-dessous donne au format hh: mm.

sélectionnez RIGHT (LEFT (job_end- job_start, 17), 5)

0
Nandhakumar S

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 ...)

0
Sam DeHaan

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
0
Vikash Rakshit

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)) 
0
Kasim Husaini

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

0
rchacko

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.

0
tapos ghosh