首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分天数的DATEADD

部分天数的DATEADD
EN

Stack Overflow用户
提问于 2012-01-28 20:43:27
回答 4查看 278关注 0票数 0

我在获取SQL SERVER中的日期计数时遇到了一些问题。我要求日历天数之间的2个日期开始和结束日期包括在内。下面的例子的问题是,它总是返回10,而我认为它应该是11。

代码语言:javascript
复制
DECLARE @FROM DATETIME, @TO DATETIME
SET @FROM = '18/12/2011 00:00:00'
SET @TO = '28/12/2011 00:00:00'

SELECT 
    DATEDIFF(MINUTE,@FROM,@TO), -- Returns 14459
    DATEDIFF(HOUR,@FROM,@TO), -- Returns 241
    DATEDIFF(DAY,@FROM,@TO), -- Returns 10
    CEILING(CAST((DATEDIFF(HOUR,@FROM,@TO) / 24) as DECIMAL(9,5))) --Returns 10
    CEILING(CAST(CEILING(CEILING(CAST(DATEDIFF(SECOND,@FROM,@TO) as DECIMAL(18,5))) / 60) / 60 as DECIMAL(9,5)) / 24) --Returns 10

如果时间之间至少有1秒,那么底线是有效的,但我必须考虑到所有情况。

我唯一的其他想法是简单地在date diff中添加一个,以说明部分天数?这可靠吗?

代码语言:javascript
复制
DATEDIFF(DAY,@FROM,@TO) + 1

我在回答这个问题时遇到了How to find the total between the dates for each values

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-28 21:00:05

是可解析为时间、日期、小日期时间、日期时间、datetime2或日期时间偏移值的表达式。日期可以是表达式、列表达式、用户定义变量或字符串文字。开始日期从结束日期中减去。

这是取自MSDN here

28-18 = 10。我认为,由于DATEDIFF的定义,您总是必须在您的场景中添加1。

票数 2
EN

Stack Overflow用户

发布于 2012-01-28 20:51:44

您需要将@TO日期设置为:

代码语言:javascript
复制
SET @TO = '28/12/2011 23:59:59'
票数 1
EN

Stack Overflow用户

发布于 2012-01-28 20:54:12

要获取两个日期之间的天数(忽略一天中的时间),包括开始日期和结束日期,请尝试;

代码语言:javascript
复制
SELECT FLOOR(CONVERT(FLOAT, @TO))-FLOOR(CONVERT(FLOAT, @FROM))+1

编辑:

代码语言:javascript
复制
SELECT DATEDIFF(d, @FROM, @TO)+1

似乎返回了完全相同的结果,这确实会使它成为一种更优雅的方式。总是认为DATEDIFF timeparts是在计算之后截断(如果开始时间晚于结束时间,则会给出错误的结果),而不是在计算之前截断,从而为您的情况提供正确的结果。你每天都会学到一些新的东西:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9045309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档