2010-07-08 37 views
1

有誰知道如何在2天之內獲得完整天數的datdiff。SQL全天差

林currentlly使用

datediff(day,createddate,dateserved) 

但需要返回多少整天

Created = 1/7/2010 2100 
dateserved = 2/7/2010 2000 

目前DATEDIFF會顯示1中的一天,但我需要它顯示爲0,直到dateserved passes 2100

任何想法 SP

回答

2

@Ian雅各布得到它在第一,但這裏是我如何在T-SQL中完成的。假設你只關注小時:

DECLARE 
    @From datetime 
,@Thru datetime 

SET @From = 'Jan 1, 2010 21:00' 
SET @Thru = 'Jan 3, 2010 20:00' -- 2/7/2010 2000 

print datediff(dd, @From, @Thru) 
print datediff(hh, @From, @Thru) 
PRINT datediff(hh, @From, @Thru)/24 

...也就是說,計算日期時間之間的小時差,除以24,並截斷小數值。 SQL似乎截斷,但如果你偏執狂,使用

print datediff(hh, @From, @Thru)/24.0 
PRINT floor(datediff(hh, @From, @Thru)/24.0) 

確保正確的截斷。如果您需要精確到分,秒或毫秒,請添加更多算術運算符。

+0

這是完美的感謝 Sp – Steven 2010-07-09 07:39:34

1

你可以使用:

DATEDIFF(dy, created_date, date_served) - 
CASE 
    WHEN CAST(created_date AS TIME) > CAST(date_served AS TIME) THEN 1 
    ELSE 0 
END 

我最初提出欲以師,但是當你到毫秒就可以迅速打溢出。

2

你可以做的是以最小的可能分辨率在DATEDIFF()函數中進行操作,你可以很容易地使用(分鐘,秒,等等)。然後把數學轉換成一天的表示。

基本上,我建議:

Floor(DATEDIFF(mi, createddate, dateserved)/60/24); 
3
SELECT FLOOR(CAST(dateserved AS FLOAT) - CAST(createddate AS FLOAT)) 

而且下面似乎工作和更簡潔,但可能需要一些測試

SELECT FLOOR(CAST(dateserved-createddate AS FLOAT))