Как сравнить две даты, чтобы найти разницу во времени в 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
11 ответов:
посмотри
DateDiff()
можно использовать DATEDIFF функция для того чтобы получить разницу в минутах, секундах, днях etc.
SELECT DATEDIFF(MINUTE,job_start,job_end)
минута очевидно возвращает разницу в минутах, вы также можете использовать день, час, второй, год (см. ссылку на книги онлайн для полного списка).
Если вы хотите получить фантазии вы можете показать это по-разному например 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
если ваша база данных
StartTime = 07:00:00
и endtime =14:00:00
, и оба типа времени. Ваш запрос, чтобы получить разницу во времени будет:SELECT TIMEDIFF(Time(endtime ), Time(StartTime )) from tbl_name
если ваша база данных 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 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
посмотри 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');
Ref: https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017