declare @date datetime
set @date='2013-08-31'
select convert(char(7),@date,120)+'-'+right('0'+convert(varchar(2),number),2) as [日期格式1]
,ltrim(year(@date))+right(100+month(@date),2)+right('0'+ltrim(number),2) as [日期格式2]
from master..spt_values with(nolock)
where type='P' and number>=1
--and number<=datediff(dd,@date,dateadd(mm,1,@date)) --对于mssql而言该语句不试用于2013-08-31的情况,这时由于9月没有31号,固计算出来的天数是30天
and number<=datediff(dd,convert(char(7),@date,120)+'-01',convert(char(7),dateadd(mm,1,@date),120)+'-01')--转换为1号来计算天数
------------
帮你改了一下
select convert(char(7),convert(nvarchar(10),DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(nvarchar(7),GETDATE(),120)+'-01')),120),120)+'-'+right('0'+convert(varchar(2),number),2) as [日期格式1]
,ltrim(year(convert(nvarchar(10),DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(nvarchar(7),GETDATE(),120)+'-01')),120)))+right(100+month(convert(nvarchar(10),DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(nvarchar(7),GETDATE(),120)+'-01')),120)),2)+right('0'+ltrim(number),2) as [日期格式2]
from master..spt_values with(nolock)
where type='P' and number>=1
--and number<=datediff(dd,convert(nvarchar(10),DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(nvarchar(7),GETDATE(),120)+'-01')),120),dateadd(mm,1,convert(nvarchar(10),DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(nvarchar(7),GETDATE(),120)+'-01')),120))) --对于mssql而言该语句不试用于2013-08-31的情况,这时由于9月没有31号,固计算出来的天数是30天
and number<=datediff(dd,convert(char(7),convert(nvarchar(10),DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(nvarchar(7),GETDATE(),120)+'-01')),120),120)+'-01',convert(char(7),dateadd(mm,1,convert(nvarchar(10),DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(nvarchar(7),GETDATE(),120)+'-01')),120)),120)+'-01')