SQL全天差

SQL全天差,sql,Sql,有人知道如何在两天之间的全天内获取datdiff吗 我现在正在使用 datediff(day,createddate,dateserved) 但需要返回多少个完整的天数 i、 e 目前datediff将显示1天,但我需要它显示0,直到dateserved超过2100 有什么想法吗 Sp您可以使用: DATEDIFF(dy, created_date, date_served) - CASE WHEN CAST(created_date AS TIME) > CAST(date_

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

我现在正在使用

datediff(day,createddate,dateserved) 
但需要返回多少个完整的天数

i、 e

目前datediff将显示1天,但我需要它显示0,直到dateserved超过2100

有什么想法吗 Sp

您可以使用:

DATEDIFF(dy, created_date, date_served) -
CASE
    WHEN CAST(created_date AS TIME) > CAST(date_served AS TIME) THEN 1
    ELSE 0
END
我最初建议尝试使用除法,但当你达到毫秒时,你可以很快找到算术溢出。

你可以使用:

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);

您所能做的就是在
DATEDIFF()
函数中使用尽可能最小的分辨率,您可以轻松地使用它(分钟、秒等)。然后是数学,将其转换为一天的表示形式

我的基本建议是:

Floor(DATEDIFF(mi, createddate, dateserved)/60/24);
此外,以下内容似乎有效且更加简洁,但可能需要一些测试

SELECT FLOOR(CAST(dateserved-createddate AS FLOAT))
此外,以下内容似乎有效且更加简洁,但可能需要一些测试

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

@伊恩·雅各布斯(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)

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

@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)
以确保正确截断。如果您需要精确到分钟、秒或毫秒,请添加多一点算术