Sql server 如何获取Datetime、Date和Time列之间的时差

Sql server 如何获取Datetime、Date和Time列之间的时差,sql-server,tsql,sql-server-2008,datetime,Sql Server,Tsql,Sql Server 2008,Datetime,我有一个名为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 我正在尝试以

我有一个名为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
它给了我以下错误:

Msg 241,16级,状态1,第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
更新-使用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
试试这个:

SELECT DATEDIFF(MINUTE,CONVERT(DATETIME,Datesub + ' ' + TimeSub,101),CONVERT(DATETIME,DateTimeClosed,101))
FROM yourTable
我想你在找

此示例将返回分钟数:

SELECT DATEDIFF(m, CONVERT(datetime, [Datesub] + ' ' + [TimeSub]), CONVERT(datetime, [DateTimeClosed]))
FROM dbo.Data_details

请给我们您的表结构(列的数据类型)@Lamak所有列都是[varchar](50)数据类型在我的表中所有数据类型都是varchar(50)我也尝试了您的查询,但它给了我相同的结果error@Peter我想他们分别在datetime,date和time。这就是你的问题:
如何获得Datetime、Date和Time列之间的时差
。铸造到他们各自的类型应该工作。我的配置很糟糕,但我已经在注释中添加了数据类型above@peter添加了包含所有varchar类型的版本。那应该work@peter-然后您可能有一个与您的示例不同格式的日期,或者某个不可能的日期(如'13/13/2011')。非常感谢您,我刚刚发现有一个记录的值为'Close',这就是导致错误的原因。如果我认为你的查询是完美的。再次感谢
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