2012-03-01 1 views
65

У меня есть две колонки:Как сравнить две даты, чтобы найти разницу во времени в 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 

ответ

107

Посмотрите на функцию 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 
... 

Вы можете увидеть его в действии/play with it here

0

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

18

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

SELECT DATEDIFF(MINUTE,job_start,job_end) 

МИНУТЫ явно возвращает разницу в минут, вы также можете использовать 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) 
+0

51 секунд поздно! В любом случае, я проголосовал за ваш ответ, поэтому нет никаких трудностей. –

+1

@JamesHill Спасибо, Джеймс, ты говоришь, будто тебе нужен праздник! Поэтому я поддержал ваш ответ. –

+0

@some_bloody_fool, (: спасибо. Вы, наверное, на самом деле! –

10

в ролях результат, как TIME и результат будет в формате времени, в течение длительности интервала.

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

Замечательно, это то, что я точно ищу.thanks! – Srini

2

Если база данных StartTime = 07:00:00 и время окончания = 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, вы также можете использовать этот запрос.

0

Попробуйте это в 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

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

Попробуйте это ...

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

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

01:14:37 
2

Объявите дату начала и окончания 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: SS:: формат МММ (24H) SELECT CONVERT(VARCHAR(12), DATEADD(MS, DATEDIFF(MS, @START_DATE, @END_DATE), 0), 114) AS TimeDiff

0

Ниже код дает чч М.И. : мм.

выберите ПРАВЫЙ (ЛЕВЫЙ (job_end- job_start, 17), 5)

+1

Я думаю, что это это не совсем то, что просит ОП. Использование DATE_DIFF должно помочь ... – Tyron78

+0

Конечно, я исправлю это. –

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^