Хорошо, так вот, казалось бы, очевидный вопрос, но я просто не следуя полностью ...Как 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
И вот результат, который я Наблюдение:
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 недели, когда есть такое же количество дней?
Аналогичным образом, я не понимаю месяц и год. Я думал, что с третьего альбома он будет округлять до 13 месяцев или 2 года?
Вы пробовали вручную подсчитывать фактические даты? –
Прочитайте раздел границ раздела date на странице https://msdn.microsoft.com/en-us/library/ms189794%28v=sql.110%29.aspx – Munir
Округление может показаться естественным для этих примеров в вашем предполагаемом использовании, но вы действительно, хотите, например, разницу в годовом исчислении между «2016-03-24» и «2016-03-25», чтобы быть 1 год по той же логике? – shawnt00