如何从9月1日开始?

问题描述 投票:1回答:1

如果我想选择相对于今天日期的日期,我可以这样做:

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

这将给我2018年11月1日。

我如何获得9月1日的日期,从上一年开始?

E.G

比如2019年7月,我想要2018年9月1日,而不是2019年。

然而,

比如2019年11月,我想要2019年9月1日,而不是2018年。

这怎么可能?

sql date sql-server-2014
1个回答
3
投票

您可以通过从date值中减去8个月,然后使用生成的year来构建9月份的日期:

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;

Output

+------------+--------------+-------------------------+
|     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 |
+------------+--------------+-------------------------+
© www.soinside.com 2019 - 2024. All rights reserved.