SQL全天差异

时间:2010-07-08 15:45:13

标签: sql

有没有人知道如何在两天之内的全天获取datdiff。

我当前正在使用

datediff(day,createddate,dateserved) 

但需要它返回多少整天

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

目前,dateiff将显示1天,但我需要它显示0直到日期保留通过2100

任何想法 属

4 个答案:

答案 0 :(得分:3)

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

此外,以下似乎有效并且更简洁,但可能需要一些测试

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

答案 1 :(得分:2)

你可以做的是使用你可以实现的DATEDIFF()功能中最小的分辨率(分钟,秒,等等)。然后数学将其转换为日期表示。

我基本上建议:

Floor(DATEDIFF(mi, createddate, dateserved)/60/24);

答案 2 :(得分:2)

@Ian Jacobs首先得到它,但这是我在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)

确保正确截断。如果您需要精确到分钟,秒或毫秒,请添加更多的算术。

答案 3 :(得分:1)

您可以使用:

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

我最初建议尝试使用除法,但是当你达到毫秒时,你可以快速击中算术溢出。