Мне нужно получить все записи после установленного дня и установленного месяца, но с переменным годом. IE: мне нужно восстановить все записи после 1 октября, растянувшись на 3 года назад.

Лучший пример: в 2019 году мне нужно будет получить все записи с 10.10.2016. В 2020 году мне нужно будет восстановить все записи, начиная с 01.10.2017.

Я мог бы жестко закодировать дату, но я бы предпочел, но не обязательно обновлять код каждый год.

Я делал это для своего предложения WHERE, но он, очевидно, не отфильтровывает записи до 10/01/2016, как мне нужно: WHERE Date> DATEADD (year, -3, GETDATE ());

0
ChemElephant 17 Апр 2019 в 16:25

2 ответа

Лучший ответ

Предполагая версию 2012 или выше, вы можете использовать datefromparts:

SELECT ...
FROM TableName
WHERE DateColumn >= DATEFROMPARTS(YEAR(GETDATE())-3, 10, 1);

Для более старых версий вы можете построить дату вручную:

SELECT ...
FROM TableName
WHERE DateColumn >= CAST((CAST(YEAR(GETDATE())-3 as char(4)) + '-10-01') as date);
1
Zohar Peled 17 Апр 2019 в 13:47

Предполагая, что для любой даты в данном году, который вы хотите указать на октябрь от 3 лет назад (так и для 1 января, и для 31 декабря 2019 года, вы хотели бы, чтобы 1 октября 2016 года), вы могли бы сделать:

SELECT ...
FROM ...
WHERE YourDateColumn >= DATEFROMPARTS(DATEPART(YEAR, GETDATE())-3,10,1)
  AND YourDateColumn <= GETDATE()
  ...
0
Larnu 17 Апр 2019 в 13:47