Oracle中字符串截取常用方法總結(jié)【推薦】
substr 函數(shù):截取字符串
語(yǔ)法:SUBSTR(string,start, [length])
string:表示源字符串,即要截取的字符串。
start:開始位置,從1開始查找。如果start是負(fù)數(shù),則從string字符串末尾開始算起。
length:可選項(xiàng),表示截取字符串長(zhǎng)度。
示例:
SELECT SUBSTR('Hello SQL!', 1) FROM dual --截取所有字符串,返回'Hello SQL!' SELECT SUBSTR('Hello SQL!', 2) FROM dual --從第2個(gè)字符開始,截取到末尾。返回'ello SQL!' SELECT SUBSTR('Hello SQL!', -4) FROM dual --從倒數(shù)第4個(gè)字符開始,截取到末尾。返回'SQL!' SELECT SUBSTR('Hello SQL!', 3, 6) FROM dual --從第3個(gè)字符開始,截取6個(gè)字符。返回'llo SQ' SELECT SUBSTR('Hello SQL!', -4, 3) FROM dual --從倒數(shù)第4個(gè)字符開始,截取3個(gè)字符。返回'SQL'
instr 函數(shù):返回子字符串在源字符串中的位置
語(yǔ)法:INSTR(string,child_string,[start],[show_time])
string:表示源字符串。
child_string:子字符串,即要查找的字符串。
start:可選項(xiàng),開始位置,默認(rèn)從1開始。如果為負(fù)數(shù),則從右向左檢索。
show_time:可選項(xiàng),表示子字符串第幾次出現(xiàn)在源字符串當(dāng)中,默認(rèn)第1次,負(fù)數(shù)則報(bào)錯(cuò)。
示例:
--表示從源字符串'city_company_staff'中第1個(gè)字符開始查找子字符串'_'第1次出現(xiàn)的位置 SELECT INSTR('city_company_staff', '_') FROM dual --返回5 --表示從源字符串'city_company_staff'中第5個(gè)字符開始查找子字符串'_'第1次出現(xiàn)的位置 SELECT INSTR('city_company_staff', '_', 5) FROM dual --返回5 --表示從源字符串'city_company_staff'中第5個(gè)字符開始查找子字符串'_'第1次出現(xiàn)的位置 SELECT INSTR('city_company_staff', '_', 5, 1) FROM dual --返回5 --表示從源字符串'city_company_staff'中第3個(gè)字符開始查找子字符串'_'第2次出現(xiàn)的位置 SELECT INSTR('city_company_staff', '_', 3, 2) FROM dual --返回13 --start參數(shù)為-1,從右向左檢索,查找'_'字符串在源字符串中第1次出現(xiàn)的位置 SELECT INSTR('city_company_staff', '_', -1, 1) FROM dual --返回13 --start參數(shù)為-6,從右向左檢索,查找'_'字符串在源字符串中第2次出現(xiàn)的位置 SELECT INSTR('city_company_staff', '_', -6, 2) FROM dual --返回5 substr 函數(shù)結(jié)合 instr 函數(shù)截取字符串
現(xiàn)有需求:數(shù)據(jù)查詢處理需要對(duì)code進(jìn)行"拆分"
code命名規(guī)則類似:城市_所屬公司_員工職位_員工姓名
其中,城市、公司、職位、姓民字符串長(zhǎng)度不固定,由于字符串長(zhǎng)度不固定,只使用substr函數(shù)無法實(shí)現(xiàn)需求,需配合instr函數(shù)定位到字符'_'的位置,然后使用substr函數(shù)進(jìn)行截取。詳細(xì)見下面例子。
表數(shù)據(jù)如下:
SOURCE_CODE BJ_BAIDU_CEO_LY SH_BOKE_MANAGER_LWX HRB_WM_CASHIER_OYZY
獲取城市:
SELECT SUBSTR (SOURCE_CODE, 1, INSTR (SOURCE_CODE, '_', 1, 1) - 1) AS CITYFROM TABLE_CODE_TEST
結(jié)果:
BJ
SH
HRB
解釋:此處截取源字符串SOURCE_CODE,從第1個(gè)字符開始,由于代表城市的code長(zhǎng)度不固定,我們無法確定截取幾個(gè)字符,所以使用instr函數(shù)判斷第一個(gè)'_'字符的位置,進(jìn)而確定每個(gè)SOURCE_CODE截取幾個(gè)字符串。
那為什么減1呢?
是因?yàn)镮NSTR (SOURCE_CODE, '_', 1, 1)獲取的是源字符串中'_'字符第一次出現(xiàn)的位置,再減1就得出了CITY字符個(gè)數(shù)。
獲取公司:
SELECT SUBSTR ( SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 1) + 1, INSTR (SOURCE_CODE, '_', 1, 2) - INSTR (SOURCE_CODE, '_', 1, 1)-1 ) AS COMPANYFROM TABLE_CODE_TEST
結(jié)果:
COMPANY
BOKE
WM
解釋:截取源字符串,從(第一個(gè)'_'出現(xiàn)位置+1)開始,截取個(gè)數(shù)為:第2個(gè)'_'出現(xiàn)位置減去第1個(gè)'_'出現(xiàn)位置,此時(shí)還多了一個(gè)下劃線'_',再減去1即可得到代表公司字符串。
獲取姓名:
SELECT SUBSTR (SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 3) + 1) AS STF_NAMEFROM TABLE_CODE_TEST
結(jié)果:
LY
LWZ
OYZY
解釋:截取源字符串,從('_'第3次出現(xiàn)位置+1)開始截取,截取到末尾。
---------------------
總結(jié)
以上所述是小編給大家介紹的Oracle中字符串截取常用方法總結(jié),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Oracle的PDB數(shù)據(jù)庫(kù)創(chuàng)建DIRECTORY時(shí)遇到ORA-65254問題及解決方法
這篇文章主要介紹了Oracle的PDB數(shù)據(jù)庫(kù)創(chuàng)建DIRECTORY時(shí)遇到ORA-65254問題,本文給大家分享完美解決方案,需要的朋友可以參考下2023-06-06解決maven不能下載oracle jdbc驅(qū)動(dòng)的問題
這篇文章主要介紹了解決maven不能下載oracle jdbc驅(qū)動(dòng)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Oracle sql批量插入多條數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了Oracle sql批量插入多條數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Oracle執(zhí)行Update語(yǔ)句的幾種方式
這篇文章介紹了Oracle執(zhí)行Update語(yǔ)句的幾種方式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05