Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.99/75: Рейтинг темы: голосов - 75, средняя оценка - 4.99
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
1

Посчитать разницу в годах между двумя датами

20.11.2012, 19:20. Просмотров 14303. Ответов 5
Метки нет (Все метки)

Встроенный DATEDIFF работает лениво и на
SQL
1
SELECT DATEDIFF(YEAR,'21.11.2011','20.11.2012')
ответит 1 так как ему лень считать разницу в днях и пересматривать что разница на самом деле = 0 лет (полного года нет). Как лучше всего считать разницу в полных годах между двумя датами?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2012, 19:20
Ответы с готовыми решениями:

Количество часов между двумя датами
Добрый день! Помогите пожалуйста! У меня есть две даты: '06.06.2005 11:15:00 AM' '07.96.2005...

Найти разницу между двумя приведенными запросами
Добрый день. Подскажите, пожалуйста, в чём разница между: select employee.name from employee left...

Найти разницу между двумя таблицами
Есть две заполненные, почти одинаковые, таблицы(не связаны между собой) и одна пустая. Нужно...

Как вычислить разницу в годах между двумя датами?
Задачка школьного уровня но напрочь забыл(. Осложняется еще и тем, что первоначальная дата задается...

5
167 / 141 / 1
Регистрация: 01.04.2010
Сообщений: 474
21.11.2012, 11:44 2
+/- 1 день из-за высокостных.

T-SQL
1
2
3
4
declare @start datetime='20111121',
        @finish datetime='20121119'
select
    datediff(year,0,datediff(day,@start,@finish))
1
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
21.11.2012, 18:19 3
SQL
1
2
3
4
DECLARE @START datetime='20111121',
        @finish datetime='20121119'
SELECT
    datediff(YEAR,@START,@finish)-CASE WHEN ((MONTH(@finish)-MONTH(@START))*32+(DAY(@finish)-DAY(@START)))>=0 THEN 0 ELSE 1 END
1
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
21.11.2012, 19:02  [ТС] 4
Devil_FoX, зная моего преподавателя и его вредность то он обязательно что-то сказонёт насчёт того что высокосные года не учитваются
Ну да я написал так (мне нужно было найти людей с возрастом от 18 и до 25 лет так что за это время n высокосных годов точно будет):
SQL
1
2
3
@now DATE = GETDATE()
...
DATEADD(YEAR,18, Person.датаРождения) < @now AND DATEADD(YEAR,25, Person.датаРождения) > @now
Добавлено через 1 минуту
Humanitis, твой вариант не понял, какие-то умножения на 32 и возврат 0 или 1 после столь многих операций ... боюсь за такой код преподаватель мой запрос зафукает, как он любит выражаться
0
167 / 141 / 1
Регистрация: 01.04.2010
Сообщений: 474
21.11.2012, 19:55 5
Gepar, там не сходится только один высокостный год.
1900-й (а это 0 в datetime) не высокостный но 2012 год высокостный.

можно дату рождения приравнять к 1-му января года рождения, а разницу вычесть с текущей даты.
тогда точно один день не потеряется и после это в Datediff запустить.
0
1 / 1 / 0
Регистрация: 04.04.2012
Сообщений: 16
20.10.2015, 06:03 6
так на будущие )
FLOOR(CONVERT(INT, @date2-@date1)/365.25)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2015, 06:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как посчитать разницу между датами в годах?
Здравствуйте! Не могу понять как посчитать разницу между двумя датами в годах. Например, человек...

Найти разницу между датами в годах
Задание Написать программу с участием типа DateTime, TimeSpan. Ввести 2 даты Найти разницу между...

Вычислить разницу между двумя датами
1. есть ли функция которая вычислит сколько прошло например с 1934 до 2014. 2. как вычислить сраж...

Определить разницу в днях между двумя датами
Как избавится от отрицательных чисел в ответе??? import java.util.Calendar; import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.