DATEDIFF
可以給你一些奇怪的結果。 例如採取這種兩DATETIME2
(我相信你有SQL Server 2008中)有5分鐘的差值:
SELECT DATEDIFF(hh,'2011-01-01 04:59:00','2011-01-01 05:04:00')
Results
-----------
1
結果是莫名其妙奇怪:1小時。奇怪,因爲分鐘的差異是5分鐘,但是小時的差別是1小時,我們知道1小時= 60分鐘。請閱讀此article以查看解釋。
解決方案:
1)代替DATEDIFF(hh,...)
使用DATEDIFF(mi,...)
例:
SELECT DATEDIFF(mi,'2011-01-01 07:55:00','2011-01-01 16:02:00') [Minutes]
,DATEDIFF(mi,'2011-01-01 07:55:00','2011-01-01 16:02:00')/60 [Hours]
--8 hours
,DATEDIFF(mi,'2011-01-01 07:55:00','2011-01-01 16:02:00')%60 [Additional minute]
--7 minute
但:
SELECT DATEDIFF(mi,'2011-01-01 08:00:59','2011-01-01 16:00:05') [Minutes]
--480
,DATEDIFF(ss,'2011-01-01 08:00:59','2011-01-01 16:00:05')/60 [Seconds/60]
--479
2)而不是使用DATEDIFF
功能(帶DATETIME[2][OFFSET]
數據類型)的使用 - 運營商的DATETIME
值:
個
DECLARE @Test TABLE
(
TestId INT IDENTITY(1,1) PRIMARY KEY
,[Enter] DATETIME NOT NULL
,[Exit] DATETIME NOT NULL
);
INSERT @Test
VALUES ('2011-01-01 07:55:00','2011-01-01 16:02:02')
,('2011-01-01 08:00:59','2011-01-01 16:00:05');
SELECT *
,t.[Exit] - t.[Enter] AS MyDateDiff
,DATEPART(hh,t.[Exit] - t.[Enter]) [Hours]
,DATEPART(mi,t.[Exit] - t.[Enter]) [Additional minutes]
,DATEPART(ss,t.[Exit] - t.[Enter]) [Additional seconds]
FROM @Test t
結果:
TestId Enter Exit MyDateDiff Hours Additional minute Additional seconds
----------- ----------------------- ----------------------- ----------------------- ----------- ----------------- ------------------
1 2011-01-01 07:55:00.000 2011-01-01 16:02:02.000 1900-01-01 08:07:02.000 8 7 2
2 2011-01-01 08:00:59.000 2011-01-01 16:00:05.000 1900-01-01 07:59:06.000 7 59 6
您正在使用哪個版本的SQL Server? –
SQL Server 2005 – Soony
如果午夜在當前工作會話之間,該怎麼辦?整個工作時間都在計算工人開始工作的那一天或他結束工作的那一天,還是你必須在午夜之前分工? –