Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析
SELECTTO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0')ASRES_ORDER_NOFROMDUAL
该语句拼接时间与LPAD产生的'REFUNDSEQ.NEXTVAL值的前6位有字符,如果不足6位,就用0补足',为防止出现重复票号增加时间,一天最多出现999999个有效票号
DUAL:是oracle的虚拟表,不是真实存在的,又称ORCLE伪表,方便输出结果集
REFUNDSEQ:这个是开发人员自己起的一个"序列"的名字,序列一般用于生成id号
REFUNDSEQ.NEXTVAL:就是取序列的下一个值
怎么把SELECTTO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0')ASRES_ORDER_NOFROMDUAL在java中显示?
//生成交易流水号 publicStringgetTicketNo()throwsException{ Mapmap=jdbcTemplate.queryForMap("SELECTTO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0')ASTICKET_NOFROMDUAL"); return(String)map.get("RES_ORDER_NO"); }
一、LPAD()、RPAD()函数
*从其字面意思也可以理解,l是left的简写,pad是填充的意思,所以lpad就是从左边填充的意思。该函数从左边对字符串使用指定的字符进行填充。
*语法:LPAD(STRING,PADDED_LENGTH,[PAD_STRING])
STRING:准备被填充的字符串;
PADDED_LENGTH:填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;
PAD_STRING:填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,lpad函数将会在string的左边粘贴空格。
用例:
*SELECTLPAD('asdfg',10,'x')FROMDUAL;输出:'xxxxxasdfg'
*SELECTLPAD('ASDFG',10,'JK')FROMDUAL;输出:'JKJKJASDFG'
*SELECTLPAD('ASDFG',2)FROMDUAL;输出:'AS'
*RPAD()函数从右边对字符串使用指定的字符进行填充,语法格式与LPAD格式相同:
RPAD('DEMO',7);将返回'DEMO'
RPAD('DEMO',2);将返回'DE'
RPAD('DEMO',8,'0');将返回'tech0000'
RPAD('DEMO',4,'M');将返回'DEMO'
RPAD('DEMO',5,'M');将返回'DEMOM'
拼接——流水号,时间,单号:LPAD(流水号||时间,6,'0')
二、NEXTVAL() 函数
*序列名.NEXTVAL:调用NEXTVAL将生成序列中的下一个序列号,调用时要指出序列名(第一次调用该方法值为10,第二次调用为11,第三次调用为12,依次递增)。
*在Oracle数据库中,什么是序列呢?它的用途是什么?序列(SEQUENCE)其实是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。
以上就是本文关于Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:oracle中length、lengthb、substr、substrb函数用法介绍、oracle求字符串长度函数length()和hengthb()简介等,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!