2012-03-01 13 views

risposta

107

Dai un'occhiata alla funzione 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 
... 

Potete vederlo in azione/play with it here

0

Date un'occhiata a DATEDIFF, questo dovrebbe essere quello che stai cercando. Prende le due date che stai confrontando e l'unità di data in cui vuoi la differenza (giorni, mesi, secondi ...)

18

È possibile utilizzare la funzione DATEDIFF per ottenere la differenza di minuti, secondi, giorni ecc

SELECT DATEDIFF(MINUTE,job_start,job_end) 

MINUTE ritorna, ovviamente, la differenza di minuti, è anche possibile utilizzare GIORNO, ORA, SECONDO ANNO (consultare il link in linea per l'elenco completo).

Se si desidera ottenere fantasia si può mostrare in modo diverso, ad esempio 75 minuti possono essere visualizzate in questo modo: 01: 15: 00: 0

Ecco il codice per farlo sia per SQL Server 2005 e 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) 
+0

51 secondi di ritardo! Ad ogni modo, ho votato la tua risposta, quindi non ci sono rancore. –

+1

@JamesHill Grazie James, sembra che tu abbia bisogno di una vacanza! Così ho upvoted la tua risposta. –

+0

@some_bloody_fool, (: grazie, probabilmente hai ragione! –

10

Fusioni il risultato come TIME e il risultato sarà in formato temporale per durata dell'intervallo.

select CAST(job_end - job_start) AS TIME(0)) from tableA 
+2

Meraviglioso, questo è quello che sto cercando esattamente.grazie! – Srini

2

Se il database StartTime = 07:00:00 e endtime = 14:00:00, ed entrambi sono il tipo di tempo. La query per ottenere la differenza di tempo potrebbe essere:

SELECT TIMEDIFF(Time(endtime), Time(StartTime)) from tbl_name 

Se il database startDate = 2014-07-20 07:00:00 e endtime = 2014-07-20 23:00:00, è anche possibile utilizzare questa query.

0

Prova questa 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 
5

Penso che è necessario il divario di tempo tra job_start & job_end.

Prova questo ...

select SUBSTRING(CONVERT(VARCHAR(20),(job_end - job_start),120),12,8) from tableA 

ho finito con questo.

01:14:37 
2

Dichiarare la data di inizio e di fine 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()) 

- ottenere il risultato in HH: MI: SS: formato MMM (24H) SELECT CONVERT(VARCHAR(12), DATEADD(MS, DATEDIFF(MS, @START_DATE, @END_DATE), 0), 114) AS TimeDiff

0

Di seguito il codice dà in hh : formato mm.

selezionare DESTRA (LEFT (job_start job_end-, 17), 5)

+1

Penso che questo non è esattamente quello che l'OP sta chiedendo. L'uso di DATE_DIFF dovrebbe aiutare ... – Tyron78

+0

Certo, correggerò questo. –

0

Ho usato seguendo la logica e ha funzionato per me come la Marvel:

CONVERT(TIME, DATEADD(MINUTE, DATEDIFF(MINUTE, AP.Time_IN, AP.Time_OUT), 0)) 
Problemi correlati