您的位置:首页 > 数据库

给一个日期,列出当前日期所在月内所有日期

2012-01-31 21:31 246 查看
整体思路:当前日期月份+1,得到下个月日期,然后将下个月日期第一天-1,得到当前日期的最后一天,从而得知当前月的总天数。

最后结合master..spt_values重构。

 

 需使用master..spt_values系统表重构日期。

先将当前日期的月份+1.得到下个月的日期

例:2012-1-31  月份+1后:   2012-2-29

再截取日期得到下个月月初的日期:

convert( char(07), dateadd(month,1,getdate()),120 )+'-01'   --->得到:2012-02-01

再将日期中天数减1,得到当前月份日期的最后一天。

dateadd(  day,-1,  convert( char(07), dateadd(month,1,getdate()),120 )+'-01'        ) --->得到:2012-01-31

然后,获取这个日期的天数。

day(     dateadd(  day,-1,  convert( char(07), dateadd(month,1,getdate()),120 )+'-01'        )     ) --->得到 31

 最后结合master..spt_values,编写SQL语句:

select dateadd(day,number,convert(varchar(7),getdate(),120)+'-01') da

from master..spt_values

where type='p' and number< day(dateadd(day,-1,convert(char(07),dateadd(month,1,getdate()),120)+'-01'))

 

另外一种解法:

with ab

as

 (

 select cast(convert(varchar(7),getdate(),120)+'-01' as datetime) da

 union all

 select dateadd(day,1,da)

 from ab

 where dt<dateadd(day,-1,convert(char(07),dateadd(month,1,getdate()),120)+'-01')

 )

select * from ab

 

同理,给一个日期,列出上个月的所有日期天数

 

select dateadd(day,number,convert(varchar(7),getdate(),120)+'-01') da

from Master..spt_values

where type='p' and number<day(dateadd(day,-1,convert(char(07),getdate(),120)+'-01'))

 

另外一种解法:

with ab

as

 (

 select cast(convert(varchar(7),getdate(),120)+'-01' as datetime) da

 union all

 select dateadd(day,1,da)

 from ab

 where dt<dateadd(day,-1,convert(char(07),getdate(),120)+'-01')

 )

select * from ab

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql
相关文章推荐