首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server如何计算DATEDIFF函数?

Server如何计算DATEDIFF函数?
EN

Stack Overflow用户
提问于 2016-01-28 00:19:54
回答 2查看 438关注 0票数 2

好吧,这里有个看似显而易见的问题,但我只是没有完全跟进.

我在一堆日期上运行了以下代码:

代码语言:javascript
复制
SELECT 
    DATEDIFF(DAY, Start, [End]) AS DIFD,
    DATEDIFF(WEEK, Start, [End]) AS DIFW,
    DATEDIFF(Month, Start, [End]) AS DIFM,
    DATEDIFF(Year, Start, [End]) AS DIFY 
FROM
    Datetest

我看到的结果是:

代码语言:javascript
复制
Start       End           Description   DIFD    DIFW    DIFM    DIFY
2010-03-25  2011-03-25  Normal Year     365     52      12      1
2011-03-25  2012-03-25  Leap Year       366     53      12      1
2010-03-24  2011-03-25  Add 1 day       366     52      12      1
2010-03-24  2011-03-26  Add 2 day       367     52      12      1
2010-03-24  2011-03-27  3 days          368     53      12      1
2010-03-24  2011-03-28  4 days          369     53      12      1
2010-03-24  2011-03-29  5 days          370     53      12      1
2010-03-24  2011-03-30  6 days          371     53      12      1
2010-03-24  2011-03-31  7 days          372     53      12      1

所以这里唯一有意义的就是日期的不同。

怎么会有几个星期,它没有认识到一个366天的闰年,把它归类为53周,然后又把第三次记录归类为52周,当有相同的天数时?

同样,我也不明白月份和年份。我想从第三次记录开始,可能会有13个月或2年的时间?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-28 00:28:35

DATEDIFF

返回指定日期部分边界在指定开始日期和结束日期之间的计数(有符号整数)。

这里的关键词是“边界”。

一周的边界取决于服务器设置(周可以从星期日或星期一开始,也可以从其他任何一天开始)。请参阅SET DATEFIRST

月的边界是月的第一天,年的边界是一月的第一天。

例如,两者

代码语言:javascript
复制
DATEDIFF(Year, '2010-03-24', '2011-03-24')
DATEDIFF(Year, '2010-01-01', '2011-12-31')

将返回1,因为在以上两个日期范围之间只有一个1月1日。

票数 6
EN

Stack Overflow用户

发布于 2016-01-28 00:29:14

DATEDIFF函数不计算精确的数字,然后再循环。它意味着跨越边界。例如,DATEDIFF(YEAR, '2016-01-01', '2016-12-31')实际上是0。

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

https://stackoverflow.com/questions/35050737

复制
相关文章

相似问题

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