【问题标题】:How to get the 1st of September from the previous September?如何从上一个 9 月获得 9 月 1 日?
【发布时间】:2019-03-07 16:34:08
【问题描述】:

如果我想选择一个相对于今天日期的日期,我可以执行以下操作:

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 年。

这怎么可能?

【问题讨论】:

  • 我不明白。你总是想要 9 月,还是发生了其他我没听懂的数学?
  • 我只关心 9 月 1 日,以过去最近的 9 月为准

标签: sql date sql-server-2014


【解决方案1】:

您可以通过从您的 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;

输出

+------------+--------------+-------------------------+
|     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 |
+------------+--------------+-------------------------+

【讨论】:

  • 为什么要使用datetimefromparts() 而不是datefromparts()
  • @GordonLinoff 习惯?
猜你喜欢
  • 1970-01-01
  • 2013-07-09
  • 2019-11-23
  • 1970-01-01
  • 2021-11-03
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多