如何生成一个简易年(月)历?
今天下午看了回了一个"已经结帐"的帖子:
[难题]如何统计出一个月中没有出现的天的次数?
http://expert.csdn.net/Expert/topic/2884/2884968.xml?temp=.509762
/*
select * into dates
from
(
select getdate() as d
union all
select getdate() + 1
union all
select getdate() + 1
) T
*/
select dateadd(day,N.i,dateadd(day,1-day(d),d) )
from
(
select 0 as i
union all
select 1
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7
union all
select 8
union all
select 9
union all
select 10
union all
select 11
union all
select 12
union all
select 13
union all
select 14
union all
select 15
union all
select 16
union all
select 17
union all
select 18
union all
select 19
union all
select 20
union all
select 21
union all
select 22
union all
select 23
union all
select 24
union all
select 25
union all
select 26
union all
select 27
union all
select 28
union all
select 29
union all
select 30
union all
select 31
) N
,
(select min(d) as d
from dates
group by datediff(month,0,d)) M
where datediff(month,dateadd(day,N.i,dateadd(day,1-day(d),d)) ,d)=0
and not exists (select 1
from Dates
where datediff(day,dateadd(day,N.i,dateadd(day,1-day(m.d),m.d)) ,d)=0)
虽然答非所问,但觉得比较有用,以前做过类似"人事软件考勤"处理!
另外再贴一个生成一个简易年(月)历的SQL,(原来用于考勤记录生成):
declare @ datetime
set @ = getdate() --'2004-03-25'
select dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(day,1-day(@),dateadd(month,1-month(@),@)))))) as [Date]
,datepart(weekday,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(day,1-day(@),dateadd(month,1-month(@),@)))))))-1 as weekday
,datepart(dayofyear,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(day,1-day(@),dateadd(month,1-month(@),@))))))) as dayofyear
from
(
select 0 as i
union all
select 1
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7
union all
select 8
union all
select 9
union all
select 10
union all
select 11
) M
,
(
select 0 as i
union all
select 1
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7
union all
select 8
union all
select 9
union all
select 10
union all
select 11
union all
select 12
union all
select 13
union all
select 14
union all
select 15
union all
select 16
union all
select 17
union all
select 18
union all
select 19
union all
select 20
union all
select 21
union all
select 22
union all
select 23
union all
select 24
union all
select 25
union all
select 26
union all
select 27
union all
select 28
union all
select 29
union all
select 30
) d
where datediff(month,dateadd(day,1-day(@),dateadd(month,1-month(@),@)),dateadd(day,d.i,dateadd(month,m.i,dateadd(day,1-day(@),dateadd(month,1-month(@),@))))) = m.i
order by [Date]
欢迎批评指教!