Oracle數(shù)據(jù)庫中字符串截取最全方法總結(jié)
substr 函數(shù):截取字符串
語法:SUBSTR(string,start, [length])
string:表示源字符串,即要截取的字符串。
start:開始位置,從1開始查找。如果start是負(fù)數(shù),則從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 --從倒數(shù)第4個字符開始,截取到末尾。返回'SQL!'
SELECT SUBSTR('Hello SQL!', 3, 6) FROM dual --從第3個字符開始,截取6個字符。返回'llo SQ'
SELECT SUBSTR('Hello SQL!', -4, 3) FROM dual --從倒數(shù)第4個字符開始,截取3個字符。返回'SQL'
instr 函數(shù):返回子字符串在源字符串中的位置
語法:INSTR(string,child_string,[start],[show_time])
string:表示源字符串。
child_string:子字符串,即要查找的字符串。
start:可選項,開始位置,默認(rèn)從1開始。如果為負(fù)數(shù),則從右向左檢索。
show_time:可選項,表示子字符串第幾次出現(xiàn)在源字符串當(dāng)中,默認(rèn)第1次,負(fù)數(shù)則報錯。
示例:
--表示從源字符串'city_company_staff'中第1個字符開始查找子字符串'_'第1次出現(xiàn)的位置
SELECT INSTR('city_company_staff', '_') FROM dual --返回5
--表示從源字符串'city_company_staff'中第5個字符開始查找子字符串'_'第1次出現(xiàn)的位置
SELECT INSTR('city_company_staff', '_', 5) FROM dual --返回5
--表示從源字符串'city_company_staff'中第5個字符開始查找子字符串'_'第1次出現(xiàn)的位置
SELECT INSTR('city_company_staff', '_', 5, 1) FROM dual --返回5
--表示從源字符串'city_company_staff'中第3個字符開始查找子字符串'_'第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ù)查詢處理需要對code進(jìn)行"拆分"
code命名規(guī)則類似:城市_所屬公司_員工職位_員工姓名
其中,城市、公司、職位、姓民字符串長度不固定,由于字符串長度不固定,只使用substr函數(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 CITY FROM TABLE_CODE_TEST
結(jié)果:

解釋:此處截取源字符串SOURCE_CODE,從第1個字符開始,由于代表城市的code長度不固定,我們無法確定截取幾個字符,所以使用instr函數(shù)判斷第一個’_'字符的位置,進(jìn)而確定每個SOURCE_CODE截取幾個字符串。
那為什么減1呢?
是因為**INSTR (SOURCE_CODE, ‘_’, 1, 1)**獲取的是源字符串中’_'字符第一次出現(xiàn)的位置,再減1就得出了CITY字符個數(shù)。
獲取公司:
SELECT SUBSTR ( SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 1) + 1, INSTR (SOURCE_CODE, '_', 1, 2) - INSTR (SOURCE_CODE, '_', 1, 1)-1 ) AS COMPANY FROM TABLE_CODE_TEST
結(jié)果:

解釋:截取源字符串,從(第一個’_'出現(xiàn)位置+1)開始,截取個數(shù)為:第2個’_‘出現(xiàn)位置減去第1個’_‘出現(xiàn)位置,此時還多了一個下劃線’_',再減去1即可得到代表公司字符串。
獲取姓名:
SELECT SUBSTR (SOURCE_CODE, INSTR (SOURCE_CODE, '_', 1, 3) + 1) AS STF_NAME FROM TABLE_CODE_TEST
結(jié)果:

解釋:截取源字符串,從('_'第3次出現(xiàn)位置+1)開始截取,截取到末尾。
Oracle 字符串截取 從后向前截取方法
Oracle 字符串截取 從后向前截取方法
- NSTR:INSTR方法的格式為
- INSTR(源字符串, 目標(biāo)字符串, 起始位置, 匹配序號)
- 默認(rèn)查找順序為從左到右。當(dāng)起始位置為負(fù)數(shù)的時候,從右邊開始查找。
- SUBSTR:取子字符串 取子字符串
- SUBSTR(源字符串,起始位置,要取多少位)
從“起始位置”開始,取“多少"個
select 'ZA01X-00000' as item_code
,instr('ZA01X-00000','-00000',-1,1) as position
,substr('ZA01X-00000',instr('ZA01X-00000','-00000',-1,1),length('ZA01X-00000')) as result
from dual
;
--
ITEM_CODE POSITION RESULT
ZA01X-00000 6 -00000
--
select substr('ZA01X-00000',-6) as result
from dual
;
--
RESULT
-00000
--
-- 實現(xiàn) 在ITEM CODE 中截取 ‘-00000' 字符串總結(jié)
到此這篇關(guān)于Oracle數(shù)據(jù)庫中字符串截取最全方法的文章就介紹到這了,更多相關(guān)Oracle字符串截取方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
oracle 12c創(chuàng)建可插拔數(shù)據(jù)庫(PDB)與用戶詳解
Oracle12c 中,增加了可插接數(shù)據(jù)庫的概念,即PDB,允許一個數(shù)據(jù)庫容器(CDB)承載多個可插拔數(shù)據(jù)庫(PDB)。下面這篇文章主要給大家介紹了利用oracle 12c創(chuàng)建可插拔數(shù)據(jù)庫(PDB)與用戶的相關(guān)資料,文中介紹的很詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02
Oracle 11G數(shù)據(jù)庫審計監(jiān)控設(shè)置指南
Oracle 11G數(shù)據(jù)庫審計監(jiān)控涉及創(chuàng)建獨(dú)立表空間、查看審計信息、遷移表空間、開啟審計及審計維護(hù)等步驟,合理規(guī)劃審計表空間有助于管理審計數(shù)據(jù),避免影響系統(tǒng)表空間,審計監(jiān)控涵蓋審計數(shù)據(jù)遷移、自動清理、權(quán)限分配、查詢審計類型等方面,確保數(shù)據(jù)庫安全性能2024-10-10

