Как сравнить две даты, чтобы найти разницу во времени в SQL Server 2005, манипуляции с датами

У меня две колонки:

job_start job_end 2011-11-02 12:20:37.247 2011-11-02 13:35:14.613 

Как можно было бы использовать T-SQL, чтобы найти сырое количество времени, которое прошло между началом работы и завершением задания?

Я попробовал это:

 select (job_end - job_start) from tableA 

но в итоге:

 1900-01-01 01:14:37.367 

Посмотрите на 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 ... 

Вы можете увидеть его в действии / играть с ним здесь

Вы можете использовать функцию DATEDIFF, чтобы получить разницу в минутах, секундах, днях и т. Д.

 SELECT DATEDIFF(MINUTE,job_start,job_end) 

MINUTE, очевидно, возвращает разницу в минутах, вы также можете использовать DAY, HOUR, SECOND, YEAR (см. Онлайн-ссылку на книги для полного списка).

Если вы хотите получить фантазию, вы можете показать это по-другому, например, 75 минут могут отображаться следующим образом: 01: 15: 00: 0

Вот код для этого как для SQL Server 2005, так и для 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) 

Передайте результат как TIME и результат будет в формате времени для продолжительности интервала.

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

Я думаю, вам нужен промежуток времени между job_start и job_end .

Попробуй это…

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

Я закончил с этим.

 01:14:37 

Если ваша firebase database StartTime = 07:00:00 и окончание = 14:00:00 , и оба являются типами времени. Ваш запрос, чтобы получить разницу во времени, будет следующим:

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

Если ваша firebase database startDate = 2014-07-20 07:00:00 и endtime = 2014-07-20 23:00:00 , вы также можете использовать этот запрос.

Объявить дату начала и окончания 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()) 

– Получить результат в формате HH: MI: SS: MMM (24H) SELECT CONVERT(VARCHAR(12), DATEADD(MS, DATEDIFF(MS, @START_DATE, @END_DATE), 0), 114) AS TimeDiff

Попробуйте это на сервере Sql

 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 

Ниже приведен код в формате hh: mm.

выберите RIGHT (LEFT (job_end- job_start, 17), 5)

Взгляните на DATEDIFF , это должно быть то, что вы ищете. Он принимает две даты, которые вы сравниваете, и блок даты, в котором вы хотите разницу (дни, месяцы, секунды …)

Я использовал следующую логику, и это работало для меня как чудо:

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

Если вы пытаетесь получить отработанные часы с некоторой точностью, попробуйте это (протестировано в SQL Server 2016)

 SELECT DATEDIFF(MINUTE,job_start, job_end)/60.00; 

Различные функциональные возможности DATEDIFF:

 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'); 

Ссылка: https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017

Давайте будем гением компьютера.