问题是这样的:有一个varchar类型的字段sid,内容为0123之类的字符!
我用left(sid,2)取出来的是1而不是01,用substring也一样!上网找了相关问题没找到!
所以来请教各位!望指点一二!谢谢!

解决方案 »

  1.   

    declare @t table(a varchar(10))
    insert @t select '0123'
    select left(a,2) from @t---- 
    01(所影响的行数为 1 行)
    不会啊
      

  2.   

    我优点明白问题在哪了!我的语句是这样的!
    select sid,
    (case len(sid)
    when 2 then 0
    when 4 then left(sid,2)
    end)
    from table1应该是case返回了整数,而不是字符串,所以才会把前面的0给消掉了!
      

  3.   

    select sid, 
    (
    case when len(sid) = 2 then 0
         when len(sid) = 4 then left(sid,2) 
    end

    from table1 select sid, 
    (
    case when len(sid) = 2 then 0
         when len(sid) >= 4 then left(sid,2) 
    end

    from table1 
      

  4.   

    select sid,
    (case len(sid)
    when 2 then 0
    when 4 then left(rtrim(sid),2)
    end)
    from table1 
      

  5.   

    问题还是没解决!辛苦各位了!
    dawugui指出的错误不是最终原因!我的数据最长就9位!
    我完整的代码是这样:select citemccode,
    case len(citemccode)
    when 2 then 0
    when 4 then left(citemccode,2)
    when 6 then left(citemccode,4)
    when 9 then left(citemccode,6)
    end
    from fitemss00class我试着把then后面的改成了字符串'asdf'它提示“将 varchar 值 'asdf' 转换为数据类型为 int 的列时发生语法错误”所以可以肯定在then后就被转换成int型了!
    这样子也不对!select citemccode,
    cast(case len(citemccode)
    when 2 then 0
    when 4 then cast(left(citemccode,2)as varchar(9))
    when 6 then cast(left(citemccode,4)as varchar(9))
    when 9 then cast(left(citemccode,6)as varchar(9))
    end as varchar(9))
    from fitemss00class
    大家共同研究一下!谢谢!
      

  6.   

    select citemccode,
    case len(citemccode)
    when 2 then '0'
    when 4 then left(citemccode,2)
    when 6 then left(citemccode,4)
    when 9 then left(citemccode,6)
    end
    from fitemss00class因为你的0是一个整型,所以下面的字符型都转换成整型了,前面的0就去掉了
      

  7.   

    select sid, 
    (case len(sid) 
    when 2 then 0
    when 4 then left(sid,2) 
    end) 
    from (select '01' as sid union all select '0204') t
    /**
    sid              
    ---- ----------- 
    01   0
    0204 2
    **/select sid, 
    (case len(sid) 
    when 2 then '0'
    when 4 then left(sid,2) 
    end) 
    from (select '01' as sid union all select '0204') t
    /**
    sid       
    ---- ---- 
    01   0
    0204 02
    **/
      

  8.   

    东塘西荷的说法是对的啊!太谢谢你了!原来case有这么个特性!谢谢大家哈!