大家好,请问我想查出表A中,字段B 以当天日期格式如:091228开头的数据,如果为0条的话就设值为091228,如果count(*)为1的话,就设为091228[1],如果为091228[1]的话就取当天日期后续位[]中最大数值加1,请问,这语句要怎样写? 
如: 
表A 

091228 
091228[1] 
091228[8] 
则结果为:091228[9]

解决方案 »

  1.   

    select 
    '091228'+'[' 
    MAX(CASE WHEN RIGHT(B,LEN(B)-6) ='' THEN '091228' 
    ELSE LTRIM(CONVERT(INT,RIGHT(B,LEN(B)-6))+1) END)+']'
      

  2.   

    运行时报错:将 varchar 值 '[2]' 转换为数据类型为 int 的列时发生语法错误。
      

  3.   

    select '091228'+'['+ ltrim(sum(case when right(b,1)=']' then cast(replace(stuff(b,1,7,''),']','') as int) else 0 end ))+']'
    from a
      

  4.   

    这个,当后已有[]时报错:将 varchar 值 '[2]' 转换为数据类型为 int 的列时发生语法错误。
    请问,要怎样解决?用substring可以避免吗?
      

  5.   

    declare @i varchar(10)
    select @i='091230'select isnull(@i+'['+cast(max(substring(b,2,len(b)-2)+1) as varchar(10))+']',@i) as b from
    (select 
    (case when right(b,len(b)-len(@i)) ='' then '[0]' 
    else right(b,len(b)-len(@i)) end) as b
    from #temp where b like @i+'%') as a
      

  6.   

    --又把stuff函数给忘了。orz
    declare @i varchar(10)
    select @i='091228'select isnull(@i+'['+
    cast(max(case when b is null then null
         when right(b,len(b)-len(@i)) ='' then 1
    else replace(stuff(b,1,len(@i)+1,''),']','')+1
    end) as varchar(10))+']',@i)
    from #temp
    where b like @i+'%'
      

  7.   

    --果然字符串操作函数需要复习了。。小F的稍微改下就OK,right的结果多了[]select 
    ISNULL('091228'+'['+
    LTRIM(MAX(CASE WHEN RIGHT(B,LEN(B)-6) ='' THEN 1 
    ELSE RIGHT(LEFT(B,LEN(B)-1),LEN(B)-8)+1 END))+']','091228')
    FROM #TEMP
    WHERE B LIKE '091228%'