已知开始年月和结束年月,生成这个时间段的连续月份。比如 :知道了2013-07到2013-10,
那么生成
2013-07,
2013-08,
2013-09,
2013-10。请问sql语句怎么写?
select to_char(sysdate,'yyyy') from dual; 获取年份
sql server 没有to_char函数……
@眉骨侠: 那就是oracle、数据库里的
@wangYiYi: 我想问的是sqlserver2008里的……谢谢。
declare @starttime datetime,@endtime datetime
set @starttime = '2013-07-01'
set @endtime ='2013-10-31'
declare @startYear int,@startMonth int ,@endYear int,@endMonth int
--set @startYear=DatePart(yyyy,@starttime)
set @startMonth=DatePart(M,@starttime)
--set @endYear=DatePart(M,@endtime);
set @endMonth=DatePart(M,@endtime)
create table #tmpStudent(alltime varchar(20))
declare @time varchar(20)
while(@startMonth<=@endMonth)
begin
set @time='2013'+'-'+cast(@startMonth as varchar(10))
insert into #tmpStudent values(@time)
set @startMonth=@startMonth+1
end
select * from #tmpStudent
drop table #tmpStudent
试试这个看看,这个是写死了的,如果想要动态的话,你更改一下就可以了,如果有帮助你就结贴吧!
虽然长点,但是你这个确实实现了,非常感谢!
你是有个问题了,加入这个起止日期跨年的话呢?例如2012-12到2013-02?
@眉骨侠: 继续循环,我不是跟你写了么,你动手试试看!
@想要飞: 这样更简便:
SELECT
DISTINCT
CONVERT (
VARCHAR (7),
DATEADD(DD, NUMBER, '2014-12-28'),
120
) AS TIME
FROM
MASTER..SPT_VALUES
WHERE
TYPE = 'P'
AND DATEADD(DD, NUMBER, '2014-12-28') <= '2015-01-02';
@眉骨侠:
看看结果,有些东西要试试的!
dateadd(day,num,时间) 中num去 联合一张有序的表中序号,就能实现有序排列