1. 程式人生 > >Oracle生成不重複票號 LPAD() 、RPAD() 函式 與 NEXTVAL() 函式概述

Oracle生成不重複票號 LPAD() 、RPAD() 函式 與 NEXTVAL() 函式概述

SELECT TO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0') AS RES_ORDER_NO FROM DUAL

該語句拼接 時間 與 LPAD產生的 'REFUNDSEQ.NEXTVAL值的前6位有字元,如果不足6位,就用0補足' ,為防止出現重複票號增加時間 ,一天最多出現999999個有效票號

DUAL : 是oracle的虛擬表,不是真實存在的,又稱ORCLE偽表,方便輸出結果集

REFUNDSEQ : 這個是開發人員自己起的一個"序列"的名字,序列一般用於生成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() 函式

        * 從其字面意思也可以理解,l是left的簡寫,pad是填充的意思,所以lpad就是從左邊填充的意思。該函式從左邊對字串使用指定的字元進行填充。

        * 語法:LPAD( STRING, PADDED_LENGTH, [ PAD_STRING ] )

           STRING :準備被填充的字串;

           PADDED_LENGTH :填充之後的字串長度,也就是該函式返回的字串長度,如果這個數量比原字串的長度要短,lpad函式將會把字串擷取成從左到右的n個字元;

           PAD_STRING :填充字串,是個可選引數,這個字串是要貼上到string的左邊,如果這個引數未寫,lpad函式將會在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() 函式從右邊對字串使用指定的字元進行填充,語法格式與LPAD格式相同:                       RPAD('DEMO', 7); 將返回'DEMO '                       RPAD('DEMO', 2); 將返回'DE'                       RPAD('DEMO', 8, '0'); 將返回'DEMO0000'                       RPAD('DEMO', 4, 'M'); 將返回 'DEMO'                       RPAD('DEMO', 5, 'M'); 將返回 'DEMOM'          拼接——流水號,時間,單號:LPAD(流水號 || 時間,6,'0')  二 、 NEXTVAL()  函式         * 序列名.NEXTVAL :呼叫NEXTVAL將生成序列中的下一個序列號,呼叫時要指出序列名(第一次呼叫該方法值為10,第二次呼叫為11,第三次呼叫為12,依次遞增)。         * 在Oracle資料庫中,什麼是序列呢?它的用途是什麼?序列(SEQUENCE)其實是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值(型別為數字)。其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查當前值,或使序列增至下一個值。

希望對你有幫助,祝你有一個好心情,加油!

若有錯誤、不全、可優化的點,歡迎糾正與補充;轉載請註明出處!