gpt4 book ai didi

sql-server - 获取两个日期之间的月、年格式的所有季度

转载 作者:行者123 更新时间:2023-12-04 02:30:50 31 4
gpt4 key购买 nike

我有两个日期 '2011-01-23''2015-11-29',

  • '2011-01-23' 属于 2011 年第一季度,所以 'Jan 2011'

  • '2015-11-29' 属于 2015 年第四季度,所以 'Oct 2015'

在 SQL Server 中,我想在一个选择列表中获取所有宿舍。例如

输入:@StartDate='2011-01-23' , @EndDate='2015-11-29'

输出:

Jan 2011
Apr 2011
Jul 2011
Oct 2011
Jan 2012
Apr 2012
Jul 2013
Oct 2013
Jan 2014
......
......
......
Jul 2015
Oct 2015

最佳答案

您可以使用递归 CTE 生成日期,如下所示:

declare @StartDate datetime
declare @EndDate datetime
select @StartDate='2011-01-23' , @EndDate='2015-11-29'

;With Quarters as (
select DATEADD(quarter,DATEDIFF(quarter,0,@StartDate),0) as dt
union all
select DATEADD(quarter,1,dt)
from Quarters
where dt < DATEADD(quarter,DATEDIFF(quarter,0,@EndDate),0)
)
select
--I'd usually keep them as dates at this point, but to match your requirement
CONVERT(varchar(3),dt,109) + ' ' + CONVERT(varchar(4),dt,120)
from Quarters order by dt

这还使用了一些其他技巧 - 它使用 CONVERT目标数据类型太短,无法快速将字符串截断为我们想要保留的部分 - 它使用 DATEADD/DATEDIFF 配对以快速将日期时间值向下舍入到它最近的间隔边界。

对于 SQL Server 2012,您可以改为使用 FORMAT生成输出字符串,但我还没有试验那么多,所以我将把它留作练习...

关于sql-server - 获取两个日期之间的月、年格式的所有季度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20628031/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com