向日期添加间隔SQL Server

问题描述

我正在sqlServer上搜索一个函数,以在日期中添加句点。我的间隔是半个月到12个月,间隔是半个月。我需要知道从当天开始的间隔的开始和结束时间,以2020-01-01为起点,每个间隔都固定在年。

注意:我不能使用存储过程,我必须在一个视图上做所有事情

enter image description here

解决方法

我不确定您从什么开始。但是,如果要使用参数生成数据集,则可以使用递归CTE:

declare @date date = '2020-01-01';
declare @interval decimal(10,1) = 1.5;
declare @n int = 4;

with cte as (
      select @date as date,@interval as interval,@n as n,1 as lev
      union all
      select (case when cte.interval % 1 = 0.5 and day(v.date) = 1
                   then dateadd(day,14,v.date)
                   when cte.interval % 1 = 0.5 and day(v.date) = 15
                   then dateadd(day,1,eomonth(v.date))
                   else cte.date
              end),interval,n,lev + 1
      from cte cross apply
           (values (dateadd(month,floor(interval),cte.date))) v(date)
      where lev < n
     )
select *
from cte;

Here是db 小提琴。