Как получить 1 сентября с предыдущего сентября? - PullRequest
1 голос
/ 07 марта 2019

Если я хочу выбрать дату относительно сегодняшней даты, я могу сделать что-то вроде:

DateAdd(month, -2, N'1-Jan-2019')

Это даст мне 1 ноября 2018 года.

Как я могу получить дату 1 сентября от предыдущего года?

1008 * например *

Скажи, что это июль 2019 года, Я хочу 1 сентября 2018 года, а не 2019.

Тем не менее,

Скажи, что это ноябрь 2019 года, Я хочу 1 сентября 2019 года, а не 2018.

Как это возможно?

1 Ответ

3 голосов
/ 07 марта 2019

Вы можете сделать это, вычтя 8 месяцев из вашего значения date, а затем используя полученное значение year для построения своей сентябрьской даты:

declare @d table(d date);
insert into @d values ('20170101'),('20180101'),('20181101'),('20190101'),('20191001'),('20190901'),('20190921'),('20190808');

select d
      ,datefromparts(year(dateadd(month,-8,d)),9,1) as PrevSeptDate
      ,datetimefromparts(year(dateadd(month,-8,d)),9,1,0,0,0,0) as PrevSeptDateTime
from @d
order by d;

Выходные данные

+------------+--------------+-------------------------+
|     d      | PrevSeptDate |    PrevSeptDateTime     |
+------------+--------------+-------------------------+
| 2017-01-01 | 2016-09-01   | 2016-09-01 00:00:00.000 |
| 2018-01-01 | 2017-09-01   | 2017-09-01 00:00:00.000 |
| 2018-11-01 | 2018-09-01   | 2018-09-01 00:00:00.000 |
| 2019-01-01 | 2018-09-01   | 2018-09-01 00:00:00.000 |
| 2019-08-08 | 2018-09-01   | 2018-09-01 00:00:00.000 |
| 2019-09-01 | 2019-09-01   | 2019-09-01 00:00:00.000 |
| 2019-09-21 | 2019-09-01   | 2019-09-01 00:00:00.000 |
| 2019-10-01 | 2019-09-01   | 2019-09-01 00:00:00.000 |
+------------+--------------+-------------------------+
...