字母+年+月的长度select patindex('%[0-9]%',cg_no)+3

解决方案 »

  1.   

    thank you!
    哪位有闲时,帮忙写个存储过程
      

  2.   

    这是一个例子,自己分析档案号的格式: 四位年+两位月+两位日+四位档案号
                    即:200202260001
           档案编号表:记录当前最新的档案编号,只有一个记录.为了防止记录 出现重复的情况.
            CREATE PROCEDURE prGetNo --产生按年月日排列的档案号
        @No varchar(12) output ---为产生的档案号
    AS 
    declare @Year Int,
            @Month int,
            @Day int,
            @Temp_No varchar(12),
            @NeedNo varchar(4) --档案号
    BEGIN
      select @year=Year(GetDate())
      select @Month=Month(GetDate())
      select @Day=Day(GetDate())
      select @No=Str(@Year,4,0)+
                    (select
                     case
                      when @Month>=10 then Str(@Month,2,0)
                      when @Month<10 Then '0'+Str(@Month,1,0)
                    end)+
                    (select
                     case
                      when @Day>=10 then Str(@Day,2,0)
                      when @Day<10 Then '0'+Str(@Day,1,0)
                     end)
      SELECT @Temp_No = 档案编号 FROM 档案编号表
         IF @No <> SUBSTRING( @Temp_No,1,8)
         SELECT @No = @No+'0001'
      ELSE
       BEGIN
         SELECT @RandNo = STR(CONVERT(int,(SUBSTRING( @Temp_No ,9,4))+1),4,0)
         SELECT @RandNo = REPLACE( @RandNo,' ','0')
         SELECT @No = @No + @RandNo
       END
      UPDATE 档案编号表
             SET 档案编号 = @No
    END
    END