如何解决如何从SQL中的给定日期获取一个月前的日期?
我正在尝试从@EndDate
中获取一个月的日期,包括SQ Server 2008中提供的日期(@EndDate
)。
@NoOfMonths
是一个变量,它确定我们需要多少个月的日期。
例如
@EndDate = 2020-07-28
@NoOfMonths = 6
预期结果将是:
2020-07-28
2020-06-28
2020-05-28
2020-04-28
2020-03-28
2020-02-28
我正在尝试使用下面的递归CTE查询,但是结果没有预期,我得到了月底日期。
@EndDate: 2020-07-28
@NoOfMonths = 6
结果:
2020-07-31
2020-06-30
2020-05-31
2020-04-30
2020-03-31
2020-02-29
代码:
DECLARE @EndDate DATE = CAST('2020 - 07 - 28' AS DATE);
DECLARE @NoOfMonths INT = 6;
WITH CTE_previousMonths AS
(
SELECT
CAST(DATEADD(ss,-1,DATEADD(mm,DATEDIFF(m,@EndDate),0)) AS DATE) AS MonthPriorDate,1 AS months
UNION ALL
SELECT
CAST(DATEADD(ss,MonthPriorDate),months + 1 AS months
FROM
CTE_previousMonths
WHERE
months < @NoOfMonths
)
SELECT CTE_previousMonths.MonthPriorDate
FROM CTE_previousMonths;
谢谢!
解决方法
我认为这应该做您想要的:
with n as (
select 1 as n
union all
select n + 1
from n
where n < @NoOfMonths
)
select dateadd(month,1 - n,@enddate)
from n;
,
使用Eomonth函数:
WITH cte1 as
(
select EOMONTH('2020-07-28') as last_date,DATEADD(MONTH,-5,EOMONTH('2020-07-28')) AS END_DATE--Number of months - 1
union all
select DATEADD(MONTH,-1,last_date),END_DATE FROM CTE1 WHERE LAST_DATE > END_DATE
)
SELECT last_date FROM cte1;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。