输入一个时间段 如: 2012-04 ----2012-09
如何能得到以下的效果呢
2012-04
2012-05
2012-06
......
2012-09
如何能得到以下的效果呢
2012-04
2012-05
2012-06
......
2012-09
解决方案 »
- 如何知道那些查询语句让服务器变慢?
- DTS执行问题
- 安装sql server 2008“性能计数器注册表配置单元一致性”失败的终极解决办法
- 感谢 happyflystone (无枪狙击手)的热心帮助,特送分
- 无法绑定由多个部分组成的标识符 "t_R_Websource_Sresult.author"。
- 如何查询一个表里的记录从第5条到第100条记录?
- SqlServer中如何使用Session级别的变量
- 从Access导入到SQL Server转换的奇怪问题!
- 这儿请教下:在ADO的SQL语句FIND里面怎样处理单引号问题呀?
- 求一句SQL 查询Excel工作表中的数据,谢谢!
- 急~~~~~~~~一个论坛的数据库文件求打开
- 重新开贴,sql语句怎样统计一个月中不同日期的总次数?
SELECT CONVERT(CHAR(7), DateSpan, 23) AS Mon
FROM ( SELECT STUFF(STUFF(CONVERT(VARCHAR(10), DATEADD(mm, id,
'2012-04-01'), 111),
5, 1, '-'), 8, 1, '-') AS DateSpan
FROM ( SELECT TOP 50
( SELECT COUNT(*)
FROM sysobjects
WHERE id <= a.id
) - 1 AS id
FROM sysobjects a
) aa
WHERE DATEADD(mm, id, '2012-04-01') <= '2012-09-01'
) A 坐等更好的优化方法
declare @Start varchar(10)
declare @End varchar(10)
set @Start='2012-04'
set @End='2012-09'
select
LEFT(@Start,5)+right('00'+ltrim(number),2) as Year_Month
from
master..spt_values
where
number between cast(RIGHT(@Start,2) as int) and cast(RIGHT(@End,2) as int)
and type='p'
/*
Year_Month
----------------
2012-04
2012-05
2012-06
2012-07
2012-08
2012-09*/
declare @Start varchar(10)
declare @End varchar(10)
set @Start='2012-04'
set @End='2013-09'
--实现跨年:
select
convert(varchar(7),DATEADD(MM,number,cast(@Start+'-01' as date)),120) as Year_Month
from
master..spt_values
where
number between 0
and DATEDIFF(MM,cast(@Start+'-01' as date),cast(@End+'-01' as date))
and type='p'/*
Year_Month
------------------
2012-04
2012-05
2012-06
2012-07
2012-08
2012-09
2012-10
2012-11
2012-12
2013-01
2013-02
2013-03
2013-04
2013-05
2013-06
2013-07
2013-08
2013-09
*/