Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据每个月的日期-时间列分隔行_Sql_Sql Server_Database_Tsql - Fatal编程技术网

Sql 根据每个月的日期-时间列分隔行

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))

我在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)),
             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