以两个日期之间的月份,年份格式获取所有季度

 LOKYIP2012_862 发布于 2023-02-09 21:23

我有两个日期说'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

Damien_The_U.. 6

您可以使用递归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/ DATEDIFFpair快速将日期时间值向下舍入到其最近的间隔边界.

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

1 个回答
  • 您可以使用递归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/ DATEDIFFpair快速将日期时间值向下舍入到其最近的间隔边界.

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

    2023-02-09 21:29 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有