zoukankan      html  css  js  c++  java
  • 记录生成流水号的方法

    背景:合同表:Contract_Master   字段:LEGAL_CONT_NO  --法务合同号(唯一性)

    要求前台保存时法务合同号在后台自动生成 

    合同号结构:

    公司代号+采购类型编码+日期+流水号(两位)

    示例:XYZ-CL-200331-01

    其中公司代号、采购类型编码在数据库中都能匹配到,直接拼接

    日期:DateTime.Now.ToString("yyMMdd");

    流水号:SELECT NVL(MAX(TO_NUMBER(SUBSTR(T.LEGAL_CONT_NO,-2,2))),0) NO FROM  Contract_Master T  WHERE  T.LEGAL_CONT_NO   LIKE  'XYZ-CL-200331-%';

    此sql语句查询出的是满足 公司代号+采购类型编码+日期条件的流水号的最大值 ,只需在此值之上加1即可得到本次的流水号

    最后在使用 NO.ToString("00");格式化为2位数  拼接起来就行了

    所用知识点总结:

    1.ToString();

    2.oracle 函数 nvl()、to_number()、max()、substr()

    nvl(a,b) :  若a=null返回b 若a!=null返回a  

    to_number() :可将varchar2或char类型的值转换为数值类型  注意:要转换的字符串类型也要符合数值类型的格式

    max():求一列的最大值

    substr():

     格式1: substr(string string, int a, int b);

     格式2:substr(string string, int a) ;

        格式1:
            1、string 需要截取的字符串
            2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
            3、b 要截取的字符串的长度

        格式2:
            1、string 需要截取的字符串
            2、a 可以理解为从第a个字符开始截取后面所有的字符串。

  • 相关阅读:
    CF666E. Forensic Examination
    bzoj1396 识别子串
    bzoj2839 集合计数
    unknown
    Hibernate中一级缓存和二级缓存
    亲, 我们来再重申一遍"=="和"equals的区别
    BigDecimal类
    序列化详解
    利用简单的参数传递来实现单条查询的easyui-datagrid
    Oracl 动态执行表不可访问,本会话的自动统计被禁止
  • 原文地址:https://www.cnblogs.com/LDJW/p/12652141.html
Copyright © 2011-2022 走看看