sql - SQL Server如何计算DATEDIFF函数?

标签 sql sql-server tsql datediff

好吧,这是一个看似显而易见的问题,但我只是没有完全理解...

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

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

这是我看到的结果:

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 周,但随后在天数相同的情况下继续将第 3 条记录归类为仅 52 周?

同样,月和年我也不懂。我想从第 3 条记录开始,四舍五入到 13 个月或 2 年?

最佳答案

DATEDIFF

Returns the count (signed integer) of the specified datepart boundaries crossed between the specified startdate and enddate.

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

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

月份的边界是该月的第一天,年份的边界是一月 1 日。

例如,两者

DATEDIFF(Year, '2010-03-24', '2011-03-24')
DATEDIFF(Year, '2010-01-01', '2011-12-31')

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

关于sql - SQL Server如何计算DATEDIFF函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35050737/

相关文章:

php - 在共享主机的 MYSQL 中的 innoDB 中打开严格模式

tsql - 当行依赖于外键值时如何使用 BULK INSERT?

.net - 在存储过程或客户端代码中循环

mysql 连接带有指示列

sql - 从星期一到星期日按星期几排序

sql连接函数

sql - 提取每组两个不同字符串之间的每个字符串

sql-server - 过滤后从 SQL Server 获取相关标签

sql-server - 如何使数据行成为分组列?

sql - 用简单的词解释 Merge SQL 语句?