栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL如何将具有日期范围的行转换为每个日期有很多行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL如何将具有日期范围的行转换为每个日期有很多行

使用一些样本数据…

create table data (begindate datetime, enddate datetime, data int);insert data select  '20130101', '20130104', 7 union all select '20130105', '20130106', 9;

查询 :(注意:如果您已经有一个数字/理货表格,请使用它)

select dateadd(d,v.number,d.begindate) adate, data  from data d  join master..spt_values v on v.type='P'       and v.number between 0 and datediff(d, begindate, enddate)order by adate;

结果

| COLUMN_0 | DATA |-----------------------------------------| January, 01 2013 00:00:00+0000 |    7 || January, 02 2013 00:00:00+0000 |    7 || January, 03 2013 00:00:00+0000 |    7 || January, 04 2013 00:00:00+0000 |    7 || January, 05 2013 00:00:00+0000 |    9 || January, 06 2013 00:00:00+0000 |    9 |

或者,您可以即时生成号码表(0-99),也可以根据需要生成任意数量的号码

;WITH Numbers(number) AS (  select top(100) row_number() over (order by (select 0))-1  from sys.columns a  cross join sys.columns b  cross join sys.columns c  cross join sys.columns d  )select dateadd(d,v.number,d.begindate) adate, data  from data d  join Numbers v on v.number between 0 and datediff(d, begindate, enddate)order by adate;

SQL小提琴演示



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号