Как получить разницу во времени между столбцами Datetime, Date и Time - PullRequest
0 голосов
/ 27 октября 2011

У меня есть таблица с именем Data_Details, и данные выглядят так:

DateTimeClosed            Datesub            TimeSub
6/20/2011 18:00           5/16/2011          17:13:17
6/20/2011 18:00           5/18/2011          13:45:17
6/1/2011 19:00            5/24/2011          8:30:12

Я пытаюсь получить разницу между закрытой датой и дополнительной датой в минутах.

Я написал что-то вроде этого:

SELECT  convert(int,convert(Datetime,[DateTimeClosed])-
(convert(Datetime,[Datesub])+convert(datetime,[TimeSub])))*24*60 
FROM dbo.Data_details

Это дает мне следующую ошибку:

Сообщение 241, Уровень 16, Состояние 1, Строка 2 Преобразование не удалось при преобразовании даты и / или времени из строки символов.

Кто-нибудь может мне помочь?

Ответы [ 4 ]

2 голосов
/ 27 октября 2011

Возвращает разницу во времени в секундах:

select datediff(SECOND,'5/16/2011'+' '+'17:13:17','6/20/2011 18:00')

Пример сценария:

declare @test as table
(
date1 datetime,
date2 date,
date3 time
)
insert into @test 
values
('6/20/2011 18:00'         ,  '5/16/2011'        ,  '17:13:17')
select Datediff(second,cast (date2 as varchar)+' '+ cast(date3 as varchar),date1) from @test

ОБНОВЛЕНИЕ - Использование varchars теперь, когда OP уточнил, что они все varchars:

declare @test as table
(
date1 varchar(50),
date2 varchar(50),
date3 varchar(50)
)
insert into @test 
values
('6/20/2011 18:00'         ,  '5/16/2011'        ,  '17:13:17')
select Datediff(second,cast (date2 +' '+date3 as datetime),cast (date1 as datetime)) from @test
0 голосов
/ 27 октября 2011
SET DATEFORMAT MDY
;with dates AS 
(
SELECT '6/20/2011 18:00' as datetimeclosed,'5/16/2011' as datesub,'17:13:17' as timesub UNION ALL
SELECT '6/20/2011 18:00','5/18/2011','13:45:17' UNION ALL
SELECT '6/1/2011 19:00','5/24/2011','8:30:12' 
)
SELECT
DATEDIFF(minute,CAST(datesub + ' ' + timesub AS DATETIME),CAST(datetimeclosed AS DATETIME)) as time_diff_in_minutes
 FROM dates
0 голосов
/ 27 октября 2011

Я думаю, что вы ищете DateDiff

Этот пример вернет минуты:

SELECT DATEDIFF(m, CONVERT(datetime, [Datesub] + ' ' + [TimeSub]), CONVERT(datetime, [DateTimeClosed]))
FROM dbo.Data_details
0 голосов
/ 27 октября 2011

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

SELECT DATEDIFF(MINUTE,CONVERT(DATETIME,Datesub + ' ' + TimeSub,101),CONVERT(DATETIME,DateTimeClosed,101))
FROM yourTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...