记录生成流水号的方法

背景:合同表: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个字符开始截取后面所有的字符串。

posted @ 2020-04-07 11:07  林间山下  阅读(598)  评论(0编辑  收藏  举报