Запрос Year Getdate - 2 года
Просьба подсказать, есть запрос
DELETE FROM testdb WHERE LASTDATE < 2018
LASTDATE имеет тип данных datetime
но нужен универсальный джоб, который удаляет все что ниже -2 года от текущего года DELETE FROM testdb WHERE LASTDATE < SELECT YEAR (GETDATE()) - 2
Ответы (2 шт):
Используйте функцию year ()
DELETE FROM testdb WHERE year(LASTDATE) <2018
or
DELETE FROM testdb WHERE year(LASTDATE) < YEAR (GETDATE ()) - 2
Гм, совет использовать функцию 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.