Попробуйте это ...
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - 7, 0)
Позвольте мне объяснить. Прежде всего, мы должны понимать, что SQL Server интерпретирует 0 как 1900-01-01 , как показано следующими функциями DATEPART.
SELECT DATEPART(YEAR, 0) AS Year
, DATEPART(MONTH, 0) AS Month
, DATEPART(DAY, 0) AS Day;
Что возвращает ...
Year Month Day
----------- ----------- -----------
1900 1 1
Следовательно, мой SQL можно переписать как ...
SELECT DATEADD(MONTH, DATEDIFF(MONTH, '1900-01-01', CURRENT_TIMESTAMP) - 7, '1900-01-01')
Теперь, возможно, немного легче увидеть, что здесь происходит. Функция DATEDIFF возвращает количество месяцев между 1900-01-01 и сегодняшним днем (CURRENT_TIMESTAMP), которое составляет 1434.
SELECT DATEADD(MONTH, 1434 - 7, '1900-01-01')
Затем мы вычитаем 7 из 1434, то есть 1427, и добавляем это много месяцев назад к 1900-01-01.
SELECT DATEADD(MONTH, 1427, '1900-01-01')
Что дает 2018-12-01.