2015-07-22 88 views
4

我試圖編寫一個ms sql代碼,在幾分鐘內爲您提供工作人員的工作時間。它需要兩個輸入作爲日期。但它總是返回0.我做錯了什麼?MS Sql Datediff函數

Create FUNCTION getMinutesWork 
(
    @inp1 date, 
    @inp2 date 
) 
RETURNS int 
As 
Begin 
    DECLARE @outp int = DATEDIFF(mi,@inp1,@inp2) 
RETURN(@outp) 
End 

,我試圖用這個

SELECT dbo.getMinutesWork('2004-10-18 07:53:31','2004-10-18 10:13:35') AS WorkTime 

則返回0。IM在SQL所以新手運行它。你能幫我嗎?

回答

4

您正在使用DATE類型的輸入參數,其精度爲一天。因此你正在失去時間部分。

使用DATETIME,或對本文的閱讀,並決定什麼是適合你: http://blogs.msdn.com/b/cdnsoldevs/archive/2011/06/22/why-you-should-never-use-datetime-again.aspx

作品:

DECLARE @p1 DATETIME = '2004-10-18 07:53:31' 
DECLARE @p2 DATETIME = '2004-10-18 10:13:35' 
SELECT DATEDIFF(mi,@p1,@p2) 

不工作(當然,它反而會得到差異在全天):

DECLARE @p1 DATE = '2004-10-18 07:53:31' 
DECLARE @p2 DATE = '2004-10-18 10:13:35' 
SELECT DATEDIFF(mi,@p1,@p2) 
+0

非常感謝。固定! – calcuku

+0

@calcuku你能標記其中之一作爲答案嗎? –

1

我認爲你的問題與提供的數據類型有關。

您正在使用不支持分鐘的date。請使用DATETIME2

+0

非常感謝你。固定! – calcuku