在MS SQL server中创建动态日历

有时候在报表中展示每天的数据需要按整月的方式显示,借用SQL Server的PIVOT可以很容易的实现这个功能。下面这个SQL可以生成每行为一个星期的月历。从【星期日】开始。

Declare 
    @Date datetime,
    @StartDate datetime,
    @EndDate datetime,
    @FirstIndex int

Set @Date =getdate() 

Select 
    @StartDate=Convert(char(6),@Date,112)+'01', 
    @EndDate=Dateadd(month,1,@StartDate)-1,
    @FirstIndex=Datediff(day,6,@StartDate)%7;--第二个参数可以调整每个行的起止星期
With t As
(
    Select Date=Convert(int,1),Row=(@FirstIndex)/7,Col=@FirstIndex
    Union All
    Select Date=Date+1,Row=(@FirstIndex+Date)/7,Col=(Date+@FirstIndex)%7
    From t
    Where Date<=Datediff(day,@StartDate,@EndDate)
)
Select 
    [星期日]=Isnull(Convert(char(2),[0]),''),
    [星期一]=Isnull(Convert(char(2),[1]),''),
    [星期二]=Isnull(Convert(char(2),[2]),''),
    [星期三]=Isnull(Convert(char(2),[3]),''), 
    [星期四]=Isnull(Convert(char(2),[4]),''),
    [星期五]=Isnull(Convert(char(2),[5]),''),
    [星期六]=Isnull(Convert(char(2),[6]),'')
From t
Pivot (Max(Date) For col In([0],[1],[2],[3],[4],[5],[6])) b

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值