1. 程式人生 > 資料庫 >Oracle中字串擷取常用方法總結【推薦】

Oracle中字串擷取常用方法總結【推薦】

substr 函式:擷取字串

語法:SUBSTR(string,start, [length])

string:表示源字串,即要擷取的字串。

start:開始位置,從1開始查詢。如果start是負數,則從string字串末尾開始算起。

length:可選項,表示擷取字串長度。

示例:

SELECT SUBSTR('Hello SQL!',1) FROM dual 

 --擷取所有字串,返回'Hello SQL!'

SELECT SUBSTR('Hello SQL!',2) FROM dual 

 --從第2個字元開始,擷取到末尾。返回'ello SQL!'

SELECT SUBSTR('Hello SQL!',-4) FROM dual  

--從倒數第4個字元開始,擷取到末尾。返回'SQL!'

SELECT SUBSTR('Hello SQL!',3,6) FROM dual 

--從第3個字元開始,擷取6個字元。返回'llo SQ'

SELECT SUBSTR('Hello SQL!',-4,3) FROM dual

--從倒數第4個字元開始,擷取3個字元。返回'SQL'

instr 函式:返回子字串在源字串中的位置

語法:INSTR(string,child_string,[start],[show_time])

string:表示源字串。

child_string:子字串,即要查詢的字串。

start:可選項,開始位置,預設從1開始。如果為負數,則從右向左檢索。

show_time:可選項,表示子字串第幾次出現在源字串當中,預設第1次,負數則報錯。

示例:

--表示從源字串'city_company_staff'中第1個字元開始查詢子字串'_'第1次出現的位置

SELECT INSTR('city_company_staff','_') FROM dual 

--返回5

--表示從源字串'city_company_staff'中第5個字元開始查詢子字串'_'第1次出現的位置

SELECT INSTR('city_company_staff','_',5) FROM dual  

--返回5

--表示從源字串'city_company_staff'中第5個字元開始查詢子字串'_'第1次出現的位置

SELECT INSTR('city_company_staff',5,1) FROM dual  

--返回5

--表示從源字串'city_company_staff'中第3個字元開始查詢子字串'_'第2次出現的位置

SELECT INSTR('city_company_staff',2) FROM dual  --返回13

--start引數為-1,從右向左檢索,查詢'_'字串在源字串中第1次出現的位置

SELECT INSTR('city_company_staff',-1,1) FROM dual  

--返回13

--start引數為-6,從右向左檢索,查詢'_'字串在源字串中第2次出現的位置

SELECT INSTR('city_company_staff',-6,2) FROM dual  

--返回5

 substr 函式結合 instr 函式擷取字串

現有需求:資料查詢處理需要對code進行"拆分"

code命名規則類似:城市_所屬公司_員工職位_員工姓名

其中,城市、公司、職位、姓民字串長度不固定,由於字串長度不固定,只使用substr函式無法實現需求,需配合instr函式定位到字元'_'的位置,然後使用substr函式進行擷取。詳細見下面例子。

表資料如下:

SOURCE_CODE
   BJ_BAIDU_CEO_LY
   SH_BOKE_MANAGER_LWX
   HRB_WM_CASHIER_OYZY

獲取城市:

SELECT SUBSTR (SOURCE_CODE,1,INSTR (SOURCE_CODE,1) - 1) AS CITYFROM TABLE_CODE_TEST

結果:

BJ

SH

HRB

解釋:此處擷取源字串SOURCE_CODE,從第1個字元開始,由於代表城市的code長度不固定,我們無法確定擷取幾個字元,所以使用instr函式判斷第一個'_'字元的位置,進而確定每個SOURCE_CODE擷取幾個字串。

那為什麼減1呢?

是因為INSTR (SOURCE_CODE,1)獲取的是源字串中'_'字元第一次出現的位置,再減1就得出了CITY字元個數。

獲取公司:

SELECT SUBSTR ( SOURCE_CODE,1) + 1,2) - INSTR (SOURCE_CODE,1)-1 ) AS COMPANYFROM TABLE_CODE_TEST

結果:

COMPANY

BOKE

WM

解釋:擷取源字串,從(第一個'_'出現位置+1)開始,擷取個數為:第2個'_'出現位置減去第1個'_'出現位置,此時還多了一個下劃線'_',再減去1即可得到代表公司字串。

獲取姓名:

SELECT SUBSTR (SOURCE_CODE,3) + 1) AS STF_NAMEFROM TABLE_CODE_TEST

結果:

LY

LWZ

OYZY

解釋:擷取源字串,從('_'第3次出現位置+1)開始擷取,擷取到末尾。
---------------------

總結

以上所述是小編給大家介紹的Oracle中字串擷取常用方法總結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!