假设我这里有一张表 table1cdefine1    cdefine2    cdefine3 
 2000-1      应收类      00234
 2000-2      应收类      00234
 2000-3      应收类      00234
 2000-4      应收类      00234
 2000-5      应收类      00234 
 2000-6      应收类      00234
 2000-7      应收类      00234
 2000-8      应收类      00234
 2000-9      应收类      00234
 2000-10      应收类      00234我想向cdefine1字段中的‘2000-’后面全部加上一个0,最终效果类似于:cdefine1    cdefine2    cdefine3 
 2000-01      应收类      00234
 2000-02      应收类      00234
 2000-03      应收类      00234
 2000-04      应收类      00234
 2000-05      应收类      00234 
 2000-06      应收类      00234
 2000-07      应收类      00234
 2000-08      应收类      00234
 2000-09      应收类      00234
 2000-010      应收类      00234请问该如何实现?希望各位才人们帮忙

解决方案 »

  1.   

    update table1 set cdefine1=stuff(cdefine1,6,0,'0')
      

  2.   

    不过,你是不是应该考虑 10 月前不加这个呢?
    如果是,那就:
    update table1 set cdefine1=stuff(cdefine1,6,0,'0') where len(cdefine1)=6
      

  3.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2011-11-28 13:59:56
    -- Version:
    --      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86) 
    -- Apr 22 2011 11:57:00 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([cdefine1] varchar(10),[cdefine2] varchar(6),[cdefine3] varchar(5))
    insert [tb]
    select '2000-1','应收类','00234' union all
    select '2000-2','应收类','00234' union all
    select '2000-3','应收类','00234' union all
    select '2000-4','应收类','00234' union all
    select '2000-5','应收类','00234' union all
    select '2000-6','应收类','00234' union all
    select '2000-7','应收类','00234' union all
    select '2000-8','应收类','00234' union all
    select '2000-9','应收类','00234' union all
    select '2000-10','应收类','00234'
    --------------开始查询--------------------------
    select
      LEFT([cdefine1],CHARINDEX('-',[cdefine1]))+RIGHT(100+RIGHT([cdefine1],len([cdefine1])-CHARINDEX('-',[cdefine1])),2),* from tb 
    ----------------结果----------------------------
    /*                cdefine1   cdefine2 cdefine3
    -------------- ---------- -------- --------
    2000-01        2000-1     应收类      00234
    2000-02        2000-2     应收类      00234
    2000-03        2000-3     应收类      00234
    2000-04        2000-4     应收类      00234
    2000-05        2000-5     应收类      00234
    2000-06        2000-6     应收类      00234
    2000-07        2000-7     应收类      00234
    2000-08        2000-8     应收类      00234
    2000-09        2000-9     应收类      00234
    2000-10        2000-10    应收类      00234(10 行受影响)*/
      

  4.   

    update table1 set cdefine1=replace(cdefine1,'2000-','2000-0')
      

  5.   

    use Tempdb
    go
    --> --> 
     
    if not object_id(N'Tempdb..#T') is null
    drop table #T
    Go
    Create table #T([cdefine1] nvarchar(7),[cdefine2] nvarchar(3),[cdefine3] nvarchar(5))
    Insert #T
    select N'2000-1',N'应收类',N'00234' union all
    select N'2000-2',N'应收类',N'00234' union all
    select N'2000-3',N'应收类',N'00234' union all
    select N'2000-4',N'应收类',N'00234' union all
    select N'2000-5',N'应收类',N'00234' union all
    select N'2000-6',N'应收类',N'00234' union all
    select N'2000-7',N'应收类',N'00234' union all
    select N'2000-8',N'应收类',N'00234' union all
    select N'2000-9',N'应收类',N'00234' union all
    select N'2000-10',N'应收类',N'00234'
    Go
    Select [cdefine1]=CASE WHEN len([cdefine1])=6 THEN stuff([cdefine1],6,0,'0')  ELSE [cdefine1] end,[cdefine2],[cdefine3]
    from #T
    /*
    cdefine1 cdefine2 cdefine3
    2000-01 应收类 00234
    2000-02 应收类 00234
    2000-03 应收类 00234
    2000-04 应收类 00234
    2000-05 应收类 00234
    2000-06 应收类 00234
    2000-07 应收类 00234
    2000-08 应收类 00234
    2000-09 应收类 00234
    2000-10 应收类 00234*/
      

  6.   

    更新用UPDATE #T 
    [cdefine1]= stuff([cdefine1],6,0,'0') 
    WHERE len([cdefine1])=6
      

  7.   

    樓主最后這條件記錄不正確吧  
    2000-010 应收类 00234
    或use Tempdb
    go
    --> --> 
     
    if not object_id(N'Tempdb..#T') is null
    drop table #T
    Go
    Create table #T([cdefine1] nvarchar(7),[cdefine2] nvarchar(3),[cdefine3] nvarchar(5))
    Insert #T
    select N'2000-1',N'应收类',N'00234' union all
    select N'2000-2',N'应收类',N'00234' union all
    select N'2000-3',N'应收类',N'00234' union all
    select N'2000-4',N'应收类',N'00234' union all
    select N'2000-5',N'应收类',N'00234' union all
    select N'2000-6',N'应收类',N'00234' union all
    select N'2000-7',N'应收类',N'00234' union all
    select N'2000-8',N'应收类',N'00234' union all
    select N'2000-9',N'应收类',N'00234' union all
    select N'2000-10',N'应收类',N'00234'
    Go
    Select [cdefine1]=CASE WHEN RIGHT([cdefine1],2) LIKE '[-][1-9]' THEN stuff([cdefine1],CHARINDEX('-',[cdefine1])+1,0,'0')  ELSE [cdefine1] end,[cdefine2],[cdefine3]
    from #T
    --更新UPDATE #T SET [cdefine1]=stuff([cdefine1],CHARINDEX('-',[cdefine1])+1,0,'0') WHERE RIGHT([cdefine1],2) LIKE '[-][1-9]'