如何在SQL Server中获取上个月或季度的报告日期范围(秒)



我们正在为客户的SQL创建一个SQL报告查询,以便根据客户的协议每月、每季度或每两年发送一次生成的自定义SQL报告。

因此,当为变量@startDate@endDate运行SQL报告时,需要动态计算日期范围,直到最后一秒的精度,例如:

上个月的报告:

@startDate: 2021-11-01 00:00:00.000
@endDate: 2021-11-30 23:59:59.000

上一季度报告:

@startDate: 2021-07-01 00:00:00.000
@endDate: 2021-09-30 23:59:59.000

不计算周期的最后一个瞬间,只使用半开区间。例如

@startDate: 2021-07-01 
@endDate: 2021-10-01 

然后

select . . .
where Dt >= @startDate
and Dt < @endDate

select . . .
where Dt >= @startDate
and Dt < dateadd(month,3,@startDate)

等等。

因此,在尝试了包括日历表在内的许多SQL查询模式后,这些简单的查询似乎效果最好:

-- First and Last Day of last month
SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) - 1, 0) AS 'Last month start date'
,DATEADD(ss, - 1, DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)) AS 'End Date';
GO
-- First and Last Day of Quarter
SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()) -1, 0) AS 'Last Quarter start datetime'
, DATEADD(second, -1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)) AS 'Last Quarter start datetime';

最新更新