1. 程式人生 > >Oracle函式SUBSTR、REGEXP_SUBSTR、LPAD使用詳解

Oracle函式SUBSTR、REGEXP_SUBSTR、LPAD使用詳解

        很多時候在做專案需求時程式碼實現一系列任務相對比較複雜時,在資料庫中往往都是有比較適用的函式供以呼叫,這裡以最近在專案中使用的三個函式,在此總結三個函式的使用場景和使用方法。

    一.substr字串擷取函式

    substr俗稱字串擷取函式,一般用於對字串進行擷取,也就是可以用於對於查詢的欄位進行擷取後注入結果集合中。下面先看看函式的兩種用法:

  1. substr(string str,int index) 從字串的index(索引)位置開始擷取,擷取後面所有的字串。
  2. substr(string str,int index,int length)從字串的index(索引)位置開始擷取,擷取長度為length的字串。

    如有下列一個表TEST

    

    擷取NUMBER,從第一個數開始擷取,擷取長度為3位:

    

    二.regexp_substr函式

      regexp_substr函式支援正則表示式來對字串進行切割。相應很多人都在專案中遇到過在某一個表的某一個欄位中根據某些特殊符號比如","對字串進行的拼接的資料的儲存的型別。在本次專案中有這樣一次需求,在一個系統之外的資料表格中對車輛的外形引數定義為:長、寬、高的資料用逗號分隔後存入了庫中的一個欄位中,先需要將該欄位的三段分離出來,分別存入到不同的欄位中,當然實現的方式可能有很多種,我採用了insert into select的方式,先用regexp-substr將該欄位拆分為三個欄位,再以insert into select的方式插入到了我們需要的業務表裡,全程非常快速。    同樣利用TEST表,在該表中插入一條資料模擬該過程。
   

    先上效果圖

    

    regexp_substr第一個引數是源字串,第二個引數是正則表示式擷取規則,第三個表示從第幾個字元開始匹配正則表示式,第四個引數表示標識第幾個匹配組,在本例中也就是說第幾個","。

    三.LPAD函式

    lpad(string,n,[pad_string])函式,從左側追加生成固定長度的字串。   

  •     string:字元或者引數
  •     n:字元的長度,是返回的字串的數量,如果這個數量比原字串的長度要短,lpad函式將會把字串擷取成從左到右的n個字元;
  •     pad_string:可選引數,這個字串是要貼上到string的左邊,若這個引數未寫,lpad函式將會在string的左邊貼上空格。

    我們經常會有這樣一些需求,生成一些訂單編號,這些訂單編號往往是具有固定長度的一些數字組成的字串,前面可能會由訂單的日期決定,但是後面幾位往往可能是系統訂單依次增加的一個序列號來組成的訂單號,如:20180708000001,前面六位是年月日,後面六位就是自動增長的一個序列,並且保證長度是不變的,那麼我們可以藉助這個函式和自增長序列來實現該功能。

    

    在我的測試系統中有一個訂單為7的序列了,那麼下一個訂單號應該是什麼呢?