2011-10-27 206 views
0

我有表名爲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號線從轉換日期和/或時間時 轉換失敗字符串。

任何人都可以幫助我嗎?

+0

請告訴我們你的表結構(列的數據類型) – Lamak

+0

@Lamak所有列是[varchar](50)數據類型 – peter

回答

2

它返回秒的時間差:

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 

UPDATE - 使用VARCHAR處理現在OP澄清,他們都是VARCHAR處理:

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

在我的表中所有的數據類型都是Varchar(50)我也試過你的查詢,但它給了我同樣的錯誤 – peter

+0

@Peter我以爲他們在哪裏da時間,日期和時間。這就是你提出的問題:'如何在日期時間,日期和時間列之間獲得時間差異'。鑄造到他們各自的類型應該工作。讓我配置 – Icarus

+0

我的不好,但我已經把數據類型放在註釋上面 – peter

0

試試這個:

SELECT DATEDIFF(MINUTE,CONVERT(DATETIME,Datesub + ' ' + TimeSub,101),CONVERT(DATETIME,DateTimeClosed,101)) 
FROM yourTable 
+0

它仍然給我同樣的錯誤 – peter

+0

@peter - 那麼你可能有一個不同的格式,你的例子,或一些不可能的日期(如'13/13/2011') – Lamak

+0

非常感謝你,我剛剛發現有一條記錄像'關閉'這樣的值,這就是導致錯誤的原因。如果我拿出你的查詢完美工作。再次感謝 – peter

0

我想你找DateDiff

這個例子將返回分鐘:

SELECT DATEDIFF(m, CONVERT(datetime, [Datesub] + ' ' + [TimeSub]), CONVERT(datetime, [DateTimeClosed])) 
FROM dbo.Data_details 
0
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