declare @v varchar(10)
--select @v=case when month(getdate())>9 then month(getdate())else  right( left(convert(varchar(20),getdate(),120),7),2) end
select @v= right( left(convert(varchar(20),getdate(),120),7),2)
select @v
@V=01
declare @v varchar(10)
select @v=case when month(getdate())>9 then month(getdate())else  right( left(convert(varchar(20),getdate(),120),7),2) end
--select @v= right( left(convert(varchar(20),getdate(),120),7),2)
select @v
@V=1

解决方案 »

  1.   

    --数据类型不一致
    declare @v varchar(10)
    select @v=case when month(getdate())>9 then ltrim(month(getdate())) else  right( left(convert(varchar(20),getdate(),120),7),2) end
    select @v
    -----------------------------
    01
      

  2.   

    declare @v varchar(10) select @v=case when month(getdate())>9 then month(getdate())else right( left(convert(varchar(20),getdate(),120),7),2) end --select @v= right( left(convert(varchar(20),getdate(),120),7),2) select @v
    --改declare @v varchar(10)
    select @v=case when month(getdate())>9 then datename(mm,getdate()) else  right( left(convert(varchar(20),getdate(),120),7),2) end
    select @v就是01
      

  3.   

    --这样
    declare @v varchar(10)
    select @v=case when month(getdate())>9 then datename(mm,getdate()) else  right( left(convert(varchar(20),getdate(),120),7),2) end
    select @v
      

  4.   

    1、数据库版本
    2、case语句种支付数据长度的选取问题参见 blog.csdn.net/herowang  种有一片关于这个问题的
      

  5.   

    --===========================================================
    declare @v varchar(10)
    --select @v=case when month(getdate())>9 then month(getdate())else  right( left(convert(varchar(20),getdate(),120),7),2) end
    select @v= right( left(convert(varchar(20),getdate(),120),7),2)
    select @v
    select left(convert(varchar(20),getdate(),120),7)
    --2010-01
    select right( left(convert(varchar(20),getdate(),120),7),2)
    --01
    --============================================================
    declare @v varchar(10)
    select @v=case when month(getdate())>9 then month(getdate())else  right( left(convert(varchar(20),getdate(),120),7),2) end
    --select @v= right( left(convert(varchar(20),getdate(),120),7),2)
    select @vselect month(getdate()) --数字
    --1
    select right( left(convert(varchar(20),getdate(),120),7),2) --文本
    --01数据类型不一致!
    修改一下即可:
    declare @v varchar(10)
    select @v=case when month(getdate())>9 then ltrim(month(getdate())) else  right( left(convert(varchar(20),getdate(),120),7),2) end
    --select @v= right( left(convert(varchar(20),getdate(),120),7),2)
    select @v--01
      

  6.   

    CASE WHEN 语句并不是根据最终结果值的类型确定返回值的类型,而是根据 THEN 和 ELSE 中各个结果值类型的优先级(优先级最高的)来确定返回值的数据类型。
    month(getdate()) 返回的是 int 类型(优先级较高),而 right 返回的 varchar 类型,因此最终返回值隐式转换为 int 类型。
      

  7.   

    我刚刚发现了这样一个问题,改成这样就OK了
    declare @v varchar(10)
    select @v=case when month(getdate())>9 then convert(varchar(10),month(getdate())) else '0'+convert(varchar(10),month(getdate()))  end
    select @v