YY493005525 2011-11-17 20:31
浏览 931
已采纳

怎样写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条回答 默认 最新

  • YY757563246 2011-11-22 20:10
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题