2011-10-27 162 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