本文介绍了SQL函数最近12个月的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在查找一个SQL函数,该函数在过去的12个月中给出了开始日期和结束日期。假设您选择10.Dec,它会给出结果:
- StartDate - EndDate
- 2013- 11-01 - 2013-11-30
- 2013-10-01 - 2013-10-31
- 2013-09-01 - 2013-09-30
我试着修改一个旧的我们有过的功能,但最后我完全失去了知觉和困惑。
ALTER FUNCTION [dbo]。[Last12Months](@ Date date)返回表
AS
返回
(
with cte as(
SELECT DATEADD(mm,DATEDIFF(mm,01,@Date),01)AS Start,
DATEADD(mm,DATEDIFF(mm, - 12,@Date),-12)AS EndDate
union all
选择Start - 1,EndDate - 1从cte
开始> = @Date)
选择CAST以DATE开始)StartDate,CAST(EndDate as DATE)从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(开始日期时间,结束日期时间)
AS
(
SELECT
DATEADD(month,DATEDIFF(month,0,@Date),0)AS开始,
DATEADD(d,-DAY(DATEADD( (date,date,date)),DATEADD(m,1,@ date))AS EndDate,
12 Cnt
UNION ALL
SELECT
DATEADD(month,-1,开始),
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
I am looking for a SQL-function that gives the last 12 months with Start Date and End Date. Say you pick 10.Dec, it will give a result in:
- StartDate -- EndDate - 2013-11-01 - 2013-11-30 - 2013-10-01 - 2013-10-31 - 2013-09-01 - 2013-09-30
and so it goes for the last 12 months.
I tried modifying an old function we had, but I got totally off and confused in the end.
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)
Runned it like this:
select * from dbo.Last12Months ('2013-12-10')
and got:
- StartDate - EndDate - 2013-12-02 - 2013-12-20
Anyone know what to do?
解决方案Please try using 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
这篇关于SQL函数最近12个月的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!