SELECT TO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0') AS RES_ORDER_NO FROM DUAL
該語句拼接 時間 與 LPAD產(chǎn)生的 'REFUNDSEQ.NEXTVAL值的前6位有字符,如果不足6位,就用0補足' ,為防止出現(xiàn)重復(fù)票號增加時間 ,一天最多出現(xiàn)999999個有效票號
DUAL : 是oracle的虛擬表,不是真實存在的,又稱ORCLE偽表,方便輸出結(jié)果集
REFUNDSEQ : 這個是開發(fā)人員自己起的一個"序列"的名字,序列一般用于生成id號
REFUNDSEQ.NEXTVAL : 就是取序列的下一個值
怎么把SELECT TO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0') AS RES_ORDER_NO FROM DUAL在java中顯示?
//生成交易流水號
public String getTicketNo() throws Exception {
Map map = jdbcTemplate.queryForMap("SELECT TO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0') AS TICKET_NO FROM DUAL");
return (String) map.get("RES_ORDER_NO");
}
一 、 LPAD() 、RPAD() 函數(shù)
* 從其字面意思也可以理解,l是left的簡寫,pad是填充的意思,所以lpad就是從左邊填充的意思。該函數(shù)從左邊對字符串使用指定的字符進行填充。
* 語法:LPAD( STRING, PADDED_LENGTH, [ PAD_STRING ] )
STRING :準備被填充的字符串;
PADDED_LENGTH :填充之后的字符串長度,也就是該函數(shù)返回的字符串長度,如果這個數(shù)量比原字符串的長度要短,lpad函數(shù)將會把字符串截取成從左到右的n個字符;
PAD_STRING :填充字符串,是個可選參數(shù),這個字符串是要粘貼到string的左邊,如果這個參數(shù)未寫,lpad函數(shù)將會在string的左邊粘貼空格。
用例:
* SELECT LPAD('asdfg',10,'x') FROM DUAL;輸出:'xxxxxasdfg'
* SELECT LPAD('ASDFG',10,'JK') FROM DUAL;輸出:'JKJKJASDFG'
* SELECT LPAD('ASDFG',2) FROM DUAL;輸出:'AS'
* RPAD() 函數(shù)從右邊對字符串使用指定的字符進行填充,語法格式與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() 函數(shù)
* 序列名.NEXTVAL :調(diào)用NEXTVAL將生成序列中的下一個序列號,調(diào)用時要指出序列名(第一次調(diào)用該方法值為10,第二次調(diào)用為11,第三次調(diào)用為12,依次遞增)。
* 在Oracle數(shù)據(jù)庫中,什么是序列呢?它的用途是什么?序列(SEQUENCE)其實是序列號生成器,可以為表中的行自動生成序列號,產(chǎn)生一組等間隔的數(shù)值(類型為數(shù)字)。其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查當前值,或使序列增至下一個值。
總結(jié)
以上就是本文關(guān)于Oracle生成不重復(fù)票號與LPAD,RPAD與NEXTVAL函數(shù)解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:oracle中l(wèi)ength、lengthb、substr、substrb函數(shù)用法介紹、oracle求字符串長度函數(shù)length()和hengthb()簡介等,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
您可能感興趣的文章:- Oracle存儲過程和存儲函數(shù)創(chuàng)建方法(詳解)
- MySQL與Oracle差異比較之三 函數(shù)
- oracle中函數(shù) trunc(),round(),ceil(),floor的使用詳解
- 淺談mysql可有類似oracle的nvl的函數(shù)
- oracle中 procedure(存儲過程)和function(函數(shù))本質(zhì)區(qū)別