zoukankan      html  css  js  c++  java
  • postgre 数据库生成有序编号

    最近开发,遇到一个比较棘手的问题,就是使用postgre数据库生成一个以天为单位的有序的编号,最开始看到的时候,上网百度了一堆,但是没有找到合适的,没办法,只能自己动手写了。

    函数如下:

    CREATE OR REPLACE FUNCTION "public"."generate_code"("num" varchar)
      RETURNS "pg_catalog"."varchar" AS $BODY$
    DECLARE  --声明变量
    curr_max_code VARCHAR; 
    new_no VARCHAR;
    vmodule varchar;
    new_date VARCHAR;
    new_code VARCHAR;
    curr_max_code_no VARCHAR;
    begin
     new_date := to_char(CURRENT_DATE,'yyyyMMdd');  --格式化当前日期为:yyyyMMdd
     vmodule := substr(num,0,3); --根据传入的参数,进行截取
      EXECUTE 'select max(code) from sys_code where  module = ''' ||  num || '''  ' INTO curr_max_code; --执行
      curr_max_code_no := substr(curr_max_code,11,5); --截取生成的编号
    
      IF curr_max_code is NULL THEN  
        new_no := '10001';
      else
        new_no := LPAD(cast(cast(curr_max_code_no as bigint)+1 as varchar),5,'0');
    	 
      END IF;
      new_code := vmodule || new_date || new_no;
      EXECUTE 'insert into public.sys_code (code,module) values (''' || new_code || ''',''' || num || ''')'; 
      return new_code;
    END
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100
    

    上述函数中看到的“sys_code”是创建存储编号的表

    表结构如下

    DROP TABLE IF EXISTS "public"."sys_code";
    CREATE TABLE "public"."sys_code" (
      "code" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
      "module" varchar(100) COLLATE "pg_catalog"."default"
    );
    
    module存编号前缀,code存当前编号。

      

  • 相关阅读:
    20170926-构建之法:现代软件工程-阅读笔记
    我的swift的ui标签
    内存管理:内存泄漏和空悬指针
    闭包
    泛型,修饰符和异常处理
    类型转换,接口和扩展
    初始化2
    类的继承和初始化1
    枚举与可选值
    swift中的类和结构
  • 原文地址:https://www.cnblogs.com/haoliyou/p/13743846.html
Copyright © 2011-2022 走看看