Как получить точную разницу в году в SQL - PullRequest
0 голосов
/ 30 октября 2019

Мне нужен простой способ найти точную разницу в год между двумя датами. Например, между 01.11.2013 и 30.10.2019. В этом случае это должно быть 5 лет, потому что текущая дата еще не достигла 01.11. Но если это между 29.10.2013 и 30.10.2019, то это должно быть 6 лет.

Давайте предположим, что это день рождения и текущие дни. Это похоже.

Я пытался получить результат с помощью следующего кода:

select datediff(year,20131101,20191030)

Это дает мне 6 вместо 5. Ближайшее решение, которое я нашел:

select datediff(day,20131101,20191030)/365

Но, как мы знаем, в этот период может быть 1 или 2 високосных года, и результат опять не совсем тот, который я ожидаю. Ни когда мы делим на 365 или 366.

Нет необходимости использовать datediff. Интересно, есть ли какой-нибудь простой способ представить его или какую-то хранимую функцию, для которой я не знал.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Вы можете попробовать ввести дату Месяц / 12.

  Declare @date1 Datetime
  Declare @date2 Datetime
  set @date1='2013-11-01 23:59:59'
  set @date2='2019-10-30 00:00:00'
(select (datediff(HOUR, @date1, @date2)/24/365 ) as diff_years)
0 голосов
/ 30 октября 2019

Вы можете взять разницу в году и затем вычесть 1, если необходимо:

select (datediff(year, val1, val2) -
        (case when month(val1) < month(val2) then 0
              when month(val1) > month(val2) then 1
              when day(val1) <= day(val2) then 0
              else 1
         end)
        ) as diff_years
...