假设某个表A,里面有几个字段,其中一个value(具体值,varchar类型)字段,一个saveNum字段(保留几位小数),如何根据saveNum来更新value的值。
例如:现在数据是
ID   value   saveNum
1     2.01        3
2     0.5          2
更新后要变成
ID     value      saveNum
1       2.010          3
2        0.50          2

解决方案 »

  1.   

    找到saveNum里最大的那个数,然后将value转换下,再截取字符串!
      

  2.   


    declare @num int
    declare @sql varchar(max)
    select @num = max(saveNum) from tb
    set @sql = 'select id,left(ltrim(cast(value as decimal(30,'+ltrim(@i)
              +'))),charindex('','',ltrim(cast(value as decimal(30,'+ltrim(@i)
              +'))))+saveNum) value,saveNum from tb'exec(@sql)
      

  3.   


    create table tb(id int,[value] varchar(20),saveNum int)
    insert into tb
    select 1,'12.233',2 union all
    select 2,'123.1',5
    godeclare @num int
    declare @sql varchar(max)
    select @num = max(saveNum) from tb
    set @sql = 'select id,left(ltrim(cast(value as decimal(30,'+ltrim(@num)
              +'))),charindex(''.'',ltrim(cast(value as decimal(30,'+ltrim(@num)
              +'))))+saveNum) value,saveNum from tb'exec(@sql)drop table tb
    /************id          value                                     saveNum
    ----------- ----------------------------------------- -----------
    1           12.23                                     2
    2           123.10000                                 5(2 行受影响)
    */
    --前提是 value 中的数据要有 .  这个字符
      

  4.   

    declare @t table (
    ID int,
    value varchar(30),
    saveNum int
    )insert @t  select
    1, '2.01', 3
    union all select
    2, '0.5', 2
    update @t set value = ltrim(str(cast(value as numeric(38,28)),38,saveNum))select * from @t
      

  5.   

    use Tempdb
    go
    --> --> 
     
    if not object_id(N'Tempdb..#') is null
    drop table #
    Go
    Create table #([ID] int,[value] varchar(20),[saveNum] int)
    Insert #
    select 1,'2.01',3 union all
    select 2,'0.5',2 union all
    select 3,'1' ,2
    Go
    Select 
    [ID],
    [value]=case when charindex('.',[value])=0 then [value]+'.'+replicate('0',[saveNum]) else left([value]+replicate('0',10),charindex('.',[value])+[saveNum]) end
    from #
    /*
    ID value
    1 2.010
    2 0.50
    3 1.00
    /*
      

  6.   

    str(value,10,saveNum)里面的10表示中长度