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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。