有誰知道如何在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天之內獲得完整天數的datdiff。SQL全天差
林currentlly使用
datediff(day,createddate,dateserved)
但需要返回多少整天
即
Created = 1/7/2010 2100
dateserved = 2/7/2010 2000
目前DATEDIFF會顯示1中的一天,但我需要它顯示爲0,直到dateserved passes 2100
任何想法 SP
@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)
確保正確的截斷。如果您需要精確到分,秒或毫秒,請添加更多算術運算符。
你可以使用:
DATEDIFF(dy, created_date, date_served) -
CASE
WHEN CAST(created_date AS TIME) > CAST(date_served AS TIME) THEN 1
ELSE 0
END
我最初提出欲以師,但是當你到毫秒就可以迅速打溢出。
你可以做的是以最小的可能分辨率在DATEDIFF()
函數中進行操作,你可以很容易地使用(分鐘,秒,等等)。然後把數學轉換成一天的表示。
基本上,我建議:
Floor(DATEDIFF(mi, createddate, dateserved)/60/24);
SELECT FLOOR(CAST(dateserved AS FLOAT) - CAST(createddate AS FLOAT))
而且下面似乎工作和更簡潔,但可能需要一些測試
SELECT FLOOR(CAST(dateserved-createddate AS FLOAT))
這是完美的感謝 Sp – Steven 2010-07-09 07:39:34