我正在寻找一个SQL函数,该函数提供最近12个月的开始日期和结束日期。假设您选择10.Dec,它将得到以下结果:
- StartDate -- EndDate - 2013-11-01 - 2013-11-30 - 2013-10-01 - 2013-10-31 - 2013-09-01 - 2013-09-30
因此,它持续了最近的12个月。
我尝试修改我们拥有的旧功能,但最后完全陷入困惑。
ALTER FUNCTION [dbo].[Last12Months](@Date date) RETURNS TABLE AS Return ( with cte as ( SELECT DATEADD(mm, DATEDIFF(mm, 01, @Date), 01) AS Start, DATEADD(mm, DATEDIFF(mm, -12, @Date), -12) AS EndDate union all select Start - 1, EndDate - 1 from cte where Start >= @Date ) select CAST(Start as DATE) StartDate, CAST(EndDate as DATE) EndDate from cte)
像这样运行它:
select * from dbo.Last12Months ('2013-12-10')
并得到:
- StartDate - EndDate - 2013-12-02 - 2013-12-20
有人知道该怎么办吗?
请尝试使用CTE:
ALTER FUNCTION [dbo].[Last12Months] ( @Date datetime ) RETURNS @tbl TABLE (Start datetime, EndDate datetime) AS BEGIN WITH T AS( SELECT DATEADD(month, DATEDIFF(month, 0, @Date), 0) AS Start, DATEADD(d, -DAY(DATEADD(m,1,@date)),DATEADD(m,1,@date)) AS EndDate, 12 Cnt UNION ALL SELECT DATEADD(month, -1, Start), DATEADD(d, -DAY(DATEADD(m,1,Start-1)),DATEADD(m,1,Start-1)), Cnt-1 FROM T WHERE Cnt-1>0 ) INSERT INTO @tbl (Start, EndDate) SELECT Start, EndDate FROM T RETURN END