Запрос Year Getdate - 2 года

Просьба подсказать, есть запрос

DELETE FROM testdb WHERE LASTDATE < 2018

LASTDATE имеет тип данных datetime

но нужен универсальный джоб, который удаляет все что ниже -2 года от текущего года DELETE FROM testdb WHERE LASTDATE < SELECT YEAR (GETDATE()) - 2


Ответы (2 шт):

Автор решения: Balamurugan Annamalai

Используйте функцию year ()

DELETE FROM testdb WHERE year(LASTDATE) <2018

or

DELETE FROM testdb WHERE year(LASTDATE) <  YEAR (GETDATE ()) - 2
→ Ссылка
Автор решения: Ferdipux

Гм, совет использовать функцию year(LASTDATE) - не совсем хорош. Есть понятие sargability - про возможность использовать индексы при условиях запроса. Функция year(LASTDATE) таковой не является, что будет приводить к сканированию таблицы, даже если есть индекс по полю LASTDATE.

Пример кода, который возвращает дату начала текущего года - 2.

DECLARE @t AS DATETIME;
SET @t = DATEADD(YEAR, DATEDIFF(YEAR, CAST(0 AS DATETIME), GETDATE()) - 2, CAST(0 AS DATETIME));
DELETE FROM testdb WHERE LASTDATE < @t;

И этот запрос - sargable, то есть может использовать индекс по полю LASTDATE.

→ Ссылка