Sql 根据每个月的日期-时间列分隔行
我在sql server数据库环境中有下表 开始日期MM/DD/YYYY的格式 我需要结果如下表所示 根据“开始日期”列,记录应在“开始日期”和“结束日期”之间的期间内每个月进行分隔Sql 根据每个月的日期-时间列分隔行,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,我在sql server数据库环境中有下表 开始日期MM/DD/YYYY的格式 我需要结果如下表所示 根据“开始日期”列,记录应在“开始日期”和“结束日期”之间的期间内每个月进行分隔 您可以使用递归CTE: with cte as ( select id, startdate as dte, enddate from t union all select id, dateadd(day, 1, eomonth(dte))
您可以使用递归CTE:
with cte as (
select id, startdate as dte, enddate
from t
union all
select id,
dateadd(day, 1, eomonth(dte)),
enddate
from t
where eomonth(dte) < enddate
)
select id, dte,
lead(dte, 1, enddate) over (partition by id order by dte)
from cte;
谢谢戈登·林诺夫
使用CTE,我得到了以下结果
我的代码
WITH cte
AS (SELECT 1 AS id,
Cast('2010-01-20' AS DATE) AS trg,
Cast('2010-01-20' AS DATE) AS strt_dte,
Cast('2010-03-15' AS DATE) AS end_dte
UNION ALL
SELECT id,
Dateadd(day, 1, Eomonth (trg)),
strt_dte,
end_dte
FROM cte
WHERE Eomonth(trg) < end_dte)
SELECT id,
trg,
strt_dte,
end_dte,
Lead (trg, 1, end_dte)
OVER (
partition BY id
ORDER BY trg) AS lead_result
FROM cte
列[开始日期]和[结束日期]是什么类型?两列的类型都是datetime