怎样写SQL语句取两个日期之间的年月作为列名,两个日期是变量的
比如 我取2000-01 到2011-12之间的年月
在 test表里
id name
1 张山
2 张三
3 李四
弄成这样
id name 2000-01 2000-01 2000-01 2000-01 2000-01~~~2011-06
1 张山 NULL NULL NULL NULL NULL NULL
2 张三 NULL NULL NULL NULL NULL NULL
3 李四 NULL NULL NULL NULL NULL NULL
我用这种方法写,不过它报错。
declare @开始日期 nvarchar(50),@结束日期 nvarchar(50)
set @开始日期='2000-01'
set @结束日期='2011-06'
--left(convert(nvarchar,getdate(),120),7) from test
while (@开始日期<@结束日期)
begin
EXEC('ALTER TABLE test ADD
['+@开始日期+'] nvarchar(50) NULL')
EXEC('UPDATE test set test.['+@开始日期+']=''@开始日期'' ')
set @开始日期='@开始日期+1'
end
if exists(select 1 from #test)
begin
declare @yuefen nvarchar(50)
declare my_cursor cursor for
select distinct yuefen from #test
open my_cursor
fetch next from my_cursor into @yuefen
while @@fetch_status=0
While @开始日期<=@结束日期
Begin
Set @sql='ALTER TABLE temp_临时表Head'+@StaffID+' Add ['+Left(@开始日期,7)+'] nvarchar(50) NULL '
Exec(@sql)
Print @sql
Set @sql='UPDATE temp_临时表Head'+@StaffID+' set temp_临时表Head'+@StaffID+'.['+Left(@开始日期,7)+']='''+Left(@开始日期,7)+''' where ord=''1'''
-- Set @开始日期=Convert(nvarchar,DATEADD(M,1,@开始日期),23)
Print @sql --输出查看
Exec(@sql)--执行
Set @开始日期=Convert(nvarchar,DATEADD(M,1,@开始日期),23)
fetch next from my_cursor into @yuefen
end
close my_cursor
deallocate my_cursor
end
[code="sqlserver"]
drop table test
create table test
(
id int primary key identity(1,1),
name varchar(20)
);
alter table test add clm_t1 nvarchar(20) null
alter table test drop column ['+@dateStr+']
select * from test;
declare @startYear int,@endYear int;
declare @startMonth int,@endMonth int
declare @dateStr nvarchar(20)
declare @yearStr nvarchar(20)
declare @monthStr nvarchar(20)
set @startYear = 2000
set @endYear=2011
set @startMonth=1
set @endMonth=12
while(@startYear<=@endYear)
begin
while(@startMonth<=@endMonth)
begin
set @yearStr = convert(nvarchar,@startYear,4)
if(@startMonth<10)
begin
set @monthStr = '0'+convert(nvarchar,@startMonth,2)
end
else
begin
set @monthStr = convert(nvarchar,@startMonth,2)
end
set @dateStr = @yearStr +'-'+@monthStr
print @dateStr
exec('alter table test add ['+@dateStr+'] nvarchar(50) null')
set @startMonth = @startMonth+1
end
set @startYear = @startYear+1
print convert(nvarchar,@startYear,4)
end
[/code]