2013-01-02 179 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 
)) 
/