如何在SQL Server中获取上一个季度的月份和年份


  • 如果日期是 2020-07-14,则输出月份:3 年份:2020
    上个季度为1,上月第一季度为3

  • 如果日期为 2020-03-14,则输出月份:9 年份:2019
    上季度-上季度为 3,上月第三季度为 9

做了一个月:

declare @month int;
declare @quarter int
set @quarter= DATEPART(Quarter, '2020-10-14')
set @month = (@quarter - 2) *3
select @month
select @quarter

请帮助我度过这一年。我已经在线搜索了Datediff和dateadd函数,但它令人困惑

如果是本季度的最后一天,那么这里有一个解决方案。这应该向前和向后工作。

DECLARE @ReportDate DATETIME = '2020-07-14'
DECLARE @QuarterInterval INT = -2
DECLARE @EndOfQuarter DATETIME =(SELECT DATEADD(DAY, -1, DATEADD(QUARTER, DATEDIFF(QUARTER, 0,DATEADD(QUARTER,@QuarterInterval , @ReportDate)) +1, 0)))
SELECT 
TheDate = @EndOfQuarter,
TheMonth = DATEPART(MONTH,@EndOfQuarter),
TheYear = DATEPART(YEAR,@EndOfQuarter)

你可以试一试:

declare @month int;declare @edate date,@year int;
set @edate= dateadd(qq, DateDiff(qq, 0, Dateadd(Month,-6,'2020-07-14'))+1,-1)
set @month=month(@edate)
set @year=year(@edate)
select @month
select @year

我想我会发现将日期调整为当前季度最后一个月的第一天然后休息 6 个月会更容易:

declare @quart int;
declare @month int;
declare @thedate date;
set @thedate = '2020-07-14';
set @quart = DATEPART(quarter, @thedate);
set @month = ((@quart - 1) * 3) + 2
set @thedate = DATEFROMPARTS(@year, @month, 1)
set @thedate = DATEADD(month, @thedate, -6)

如果它是上个季度之前季度的最后一天,您可以使用EOMONTH功能将此日期转换为该月的最后一天,而不是第一个

您也可以考虑获取当前日期,添加(((MONTH(日期( - 1( % 3( - 6(个月,然后对其进行EOMONTH化。该公式产生 -4、-5 或 -6,具体取决于该月是该季度的第一个第二月还是第三月(第 7 季度是第 3 季度的第一个月,变为 -4,7-4 = 3,3 月,第 1 季度的最后一个月(。EOMONTH将在数学结束时将日期放在当月的最后一个

最新更新