73 votes

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 fini avec ceci:

 1900-01-01 01:14:37.367
 

127voto

James Hill Points 27532

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 / jouer avec ici

19voto

Vince Pergolizzi Points 1453

Vous pouvez utiliser le DATEDIFF fonction permettant d'obtenir la différence en minutes, secondes, jours, etc.

SELECT DATEDIFF(MINUTE,job_start,job_end)

MINUTE évidemment renvoie la différence en quelques minutes, vous pouvez également utiliser le JOUR, l'HEURE, de la DEUXIÈME ANNÉE (voir la documentation en ligne de lien pour la liste complète).

Si vous voulez obtenir la fantaisie, vous pouvez montrer de façon différente par exemple de 75 minutes pourrait être affiché comme ceci: 01:15:00:0

Voici le code pour faire cela 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)

13voto

Ric Points 11

Transforme le résultat en TIME et le résultat sera au format heure pour la durée de l'intervalle

sélectionnez CAST (job_end - job_start) AS TIME (0)) dans la tableA

0voto

tapos007 Points 1

si votre base de données StartTime = 07:00:00 et endtime = 14:00:00 sont tous deux de type heure. Votre requête pour obtenir le décalage horaire

SELECT TIMEDIFF (Heure (heure de fin), Heure (Heure de début)) à partir de 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 aussi utiliser cette requête

0voto

Sam DeHaan Points 7096

Jetez un coup d'œil à DATEDIFF , cela devrait être 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, etc.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X