Far*_*lia 2 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)
这是我看到的结果:
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
Run Code Online (Sandbox Code Playgroud)
因此,唯一有意义的是按日期的差异.
几周以来,它没有设法认识到366天的闰年并将其归类为53周,但随后又将第3条记录归类为仅有52周的时间相同的天数?
同样,我不了解月份和年份.我从第3次记录开始就想到,这将是13个月或2年?
返回指定的startdate和enddate之间交叉的指定datepart 边界的计数(有符号整数) .
这里的关键词是"边界".
一周的边界取决于服务器设置(周可以在周日或周一或任何其他日期开始).看到SET DATEFIRST
几个月的边界是该月的第一天,多年的边界是1月1日.
例如,两者
DATEDIFF(Year, '2010-03-24', '2011-03-24')
DATEDIFF(Year, '2010-01-01', '2011-12-31')
Run Code Online (Sandbox Code Playgroud)
将返回1,因为在上述两个日期范围之间只有1月1日.