川娃子 2015-07-01 11:09 采纳率: 50%
浏览 4299
已采纳

sql 按规则生成编号,字母递增

生成规则 HFR+Code+Date
这是生成的主键编号
HFR-xxx-20150101
HFR-xxx-20150104
HFR-xxx-20150109
HFR-xxx-20150111
HFR-xxx-20150112

当Code和Date重复时就在后面加字母区分
HFR-xxx-20150101
HFR-xxx-20150101A
HFR-xxx-20150101B
HFR-xxx-20150101C
HFR-xxx-20150101D
超过26个字母就这样
HFR-xxx-20150101Z
HFR-xxx-20150101ZA
.....
HFR-xxx-20150101ZZA
....
HFR-xxx-20150101ZZZA
如果后面是数据就好办了,但字母就有点难处理了
注意考虑并发情况

  • 写回答

2条回答 默认 最新

  • Tiger_Zhao 2015-07-02 02:54
    关注

    建一个辅助表SubCode(No,Code),内容

        No Code
        -- ----
         0      <-Code为空字符串
         1 A
         2 B
        ...
        26 Z
        27 ZA
        ...
    

    以下为SQL Server的例子

        DECLARE @key varchar(20)
        DECLARE @lastKey varchar(20)
        DECLARE @subCode varchar(4)
        DECLARE @no int
    
        -- 编号前缀
        SET @key = 'HFR-xxx-20150101'
        -- 求最大编号
        SELECT @lastKey = MAX([key]) FROM table1
    
        IF (@lastKey IS NOT NULL)
        BEGIN
            -- 最大子编号
            SET @subCode = SUBSTRING(@lastKey,LEN(@key)+1,4)
            SELECT @no = No FROM SubCode WHERE Code = @subCode
            -- 下个子编号
            SELECT @subCode = Code FROM SubCode WHERE No = @no + 1
            -- 拼接
            SET @key = @key + @subCode
        END
        /*
        ELSE 直接使用编号 @key
        */
    
        -- 并发只能用编号唯一引发错误,重试
        INSERT INTO table1([key],...)
        VALUES(@key,...)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler