怎样写SQL语句取两个日期之间的年月作为列名,两个日期是变量的

怎样写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

2个回答

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]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问