SQL Server 创建自定义季度,其开始日期和结束日期从给定日期开始

gajydyqb  于 2023-01-20  发布在  其他
关注(0)|答案(2)|浏览(205)

假设我的日期为= 2023 - 03 - 28,我想创建如下表所示的季度。
| 第1季度-开始日期|第1季度-结束日期|第2季度-开始日期|第2季度-结束日期|第3季度-开始日期|第3季度-结束日期|第4季度-开始日期|第4季度-结束日期|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 二○二三年三月一日|二〇二三年五月三十一日|二○二三年六月一日|二〇二三年八月三十一日|2023年9月1日|二〇二三年十一月三十日|二〇二三年十二月一日|二○二四年二月二十九日|
我想照顾闰年以及,这就是为什么我用的例子与闰年是为例。第四季度结束日期是29。
我的日期可以是随机的。我如何在SQL中使用函数、存储过程或类似的东西来做到这一点呢?

thtygnil

thtygnil1#

通过减去日期的天数再加上1天来查找第1季度的开始日期。通过在上一季度的结束日期上加上1天,可以确定其余所有季度的开始日期。通过在特定季度的开始日期上加上3个月再加上1天,可以确定所有季度的结束日期。

查询

declare @dt as date;
set @dt = '2023-03-28';

declare @q1_start as date, 
        @q1_end as date,
        @q2_start as date,
        @q2_end as date,
        @q3_start as date,
        @q3_end as date,
        @q4_start as date,
        @q4_end as date;

set @q1_start = dateadd(day, -day(@dt) + 1, @dt);
set @q1_end = dateadd(day, -1, dateadd(month, 3, @q1_start));
set @q2_start = dateadd(day, 1, @q1_end);
set @q2_end = dateadd(day, -1, dateadd(month, 3, @q2_start));
set @q3_start = dateadd(day, 1, @q2_end);
set @q3_end = dateadd(day, -1, dateadd(month, 3, @q3_start));
set @q4_start = dateadd(day, 1, @q3_end);
set @q4_end = dateadd(day, -1, dateadd(month, 3, @q4_start));

select @q1_start as Q1_Start,
       @q1_end as Q1_End,
       @q2_start as Q2_Start, 
       @q2_end as Q2_End, 
       @q3_start as Q3_Start, 
       @q3_end as Q3_End, 
       @q4_start as Q4_Start, 
       @q4_end as Q4_End;
rdrgkggo

rdrgkggo2#

可以按如下方式使用EOMONTH和DATEADD函数:

DECLARE @sdate Date;
SET @sdate = '2023-03-28';
SELECT 
  DATEADD(DAY,1,EOMONTH(@sdate,-1)) [Q1-StartDate], EOMONTH(@sdate,2)  [Q1-EndDate],
  DATEADD(DAY,1,EOMONTH(@sdate,2))  [Q2-StartDate], EOMONTH(@sdate,5)  [Q2-EndDate],
  DATEADD(DAY,1,EOMONTH(@sdate,5))  [Q3-StartDate], EOMONTH(@sdate,8)  [Q3-EndDate], 
  DATEADD(DAY,1,EOMONTH(@sdate,8))  [Q4-StartDate], EOMONTH(@sdate,11) [Q4-EndDate]

See demo

相关问题