Если EndDate равен нулю, то выход функции DateDiff будет нулевым, а любое значение null по сравнению с чем-либо (даже с другим нулем) будет результатом нулевого значения (обычно интерпретируемого как false)
Я предлагаю вы используете COALESCE для преобразования даты окончания в сегодняшнюю дату, если она равна нулю:
SELECT
UniqueID,
DATEDIFF(yy, Begin_Date,COALESCE(End_Date, GetUtcDate()) as timeactive
FROM TABLE
WHERE DATEDIFF(yy, Begin_Date,COALESCE(End_Date, GetUtcDate()) > 1
Следует иметь в виду, что используемая здесь функция DATEDIFF в SQLserver НЕ возвращает количество времени, прошедшее между две даты. Он возвращает количество раз, которое именованный интервал изменялся между двумя датами
Например, DATEDIFF(year, 2000-01-01, 2000-12-31 23:59:59)
вернет 0, потому что это оба 2000 года, даже если они всего на одну секунду меньше года. , Если вы сделаете DATEDIFF(year, 2000-12-31 23:59:59, 2001-01-01 00:00:01)
, даже если эти даты находятся на расстоянии только в две секунды, datediff сообщит о них как об интервале в 1 год, потому что номер года изменился с 2000 на 2001.
DATEDIFF подсчитывает единицу каждый раз, когда вращаются часы после изменения интервала, и в этом случае интервал будет Год
Чтобы ваши даты были представлены как 1,5 года и c, вы должны рассмотреть возможность датировки по меньшему интервалу и деления, например, запросить разницу в ДНЯХ. между двумя датами, а затем делить на 365,25 - среднее количество дней в году. Чем меньше интервал, который вы запрашиваете у datediff, тем точнее будет результат, но он никогда не будет равен 100%. Если вы ставите результаты после одного десятичного знака года, то дни будут достаточно точными
Чтобы получить 1 десятичное место, приведите к цифре c с 1 DP:
SELECT
UniqueID,
CAST(DATEDIFF(day, Begin_Date,COALESCE(End_Date, GetUtcDate())/365.25 AS NUMERIC(5,1)) as timeactive
FROM TABLE
WHERE DATEDIFF(day, Begin_Date,COALESCE(End_Date, GetUtcDate()) >= 365