2013-01-02 181 views
4

我有一个表中的两列@ABC as DateTime@xyz as DateTime只有时间 - 数据类型。减去日期时间列

我想减去唯一的一次,我想是这样的:

ABC = 21/02/2012 6:10:00 PMXYZ = 01/01/2001 12:00:00 AM - >第一行。

CONVERT(varchar(10), dbo.checkingtime.ABC – dbo.checkingtime.XYZ, 108) 

和我得到的结果作为18:10,但我想在时间只有几分钟的结果作为05:50

这可能吗? ? ?

+5

它是如何有意义,从'减去午夜6时10 pm'应导致'05 :50'?它可能*可能*有意义,如果减法是相反的... –

+0

你只需要两个小时之间的差距? – Arshad

回答

1

这是prolly你想要的事情。这是建立在功能,但我会建议你建立自己的。

DATEDIFF (datepart , startdate , enddate) 

拿笔记,你将需要“面具”开始和结束日期与当天得到你想要的结果(这是时间性差异)。结果将以分钟为单位,但您可以轻松将其格式化为小时:分钟。

欢呼

0

你可以尝试这样的功能:

CREATE FUNCTION GetTimeDifference 
(
@FirstDate datetime, 
@SecondDate datetime 
) 
RETURNS varchar(10) 
AS 
BEGIN 
DECLARE @Difference INT 
DECLARE @FirstTimeInMin INT 
DECLARE @SecondTimeInMin INT 

SELECT @FirstTimeInMin = 
(DATEPART(hour,@FirstDate) * 60 + DATEPART(minute,@FirstDate)) 
SELECT @SecondTimeInMin = 
(DATEPART(hour,@SecondDate) * 60 + DATEPART(minute,@SecondDate)) 

IF @FirstTimeInMin = 0 
SET @FirstTimeInMin = 24 * 60 

IF @SecondTimeInMin = 0 
SET @SecondTimeInMin = 24 * 60 

SET @Difference = @FirstTimeInMin - @SecondTimeInMin 

IF(@Difference < 0) 
SET @Difference = @Difference * -1 

RETURN RIGHT('0' + CONVERT(varchar(10), @Difference/60), 2) 
+ ':' + 
RIGHT('0' + CONVERT(varchar(10), @Difference - (@Difference/60) * 60), 2) 

END 
GO 

而且你可以使用它像这样:

SELECT dbo.GetTimeDifference('02/02/2012 6:10:00 PM','01/01/2001 12:00:00 AM') 

这应该引起05:50

0

这会做,

select right(date2-date1,7) as time from table1 

结果:

TIME 
5:50AM 

SQL_LIVE_DEMO

0

这里是很好的例子,我发现:

Select start_date, end_date, time_diff, 
    EXTRACT(DAY FROM time_diff) days, 
    EXTRACT(HOUR FROM time_diff) hours, 
    EXTRACT(MINUTE FROM time_diff) minutes, 
    EXTRACT(SECOND FROM time_diff) seconds 
From 
(
Select start_date, end_date, end_date - start_date time_diff 
From 
(
Select CAST(to_date('21/02/2012 06:10:00 am', 'dd/mm/yyyy hh:mi:ss am') AS TIMESTAMP) end_date 
, CAST(to_date('01/01/2012 12:00:00 am', 'dd/mm/yyyy hh:mi:ss am') AS TIMESTAMP) start_date 
From dual 
)) 
/