Oracle 字符串截取、替換


字符串截取

substr 函數:截取字符串

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

解釋:

  • String:源字符串
  • start:開始位置,從0或1開始查找,如果start是負數,則從string字符串末尾開始算起
  • length:可選項,表示字符串的長度
--截取所有字符串,返回'Hello ghostwolf1'
SELECT SUBSTR('Hello ghostwolf1', 0) NAME FROM DUAL;
--截取所有字符串,返回'Hello ghostwolf1'
SELECT SUBSTR('Hello ghostwolf1', 1) NAME FROM DUAL;
--從第7個字符串開始截取,返回‘ghostwolf1’
SELECT SUBSTR('Hello ghostwolf1', 7) NAME FROM DUAL;
--從倒數第10個字符開始,截取到末尾,返回‘ghostwolf1’
SELECT SUBSTR('Hello ghostwolf1', -10) NAME FROM DUAL;
--從第7個字符開始,截取17個字符。返回'ghostwolf1'
SELECT SUBSTR('Hello ghostwolf1', 7, 17) NAME FROM DUAL;
--從倒數第4個字符開始,截取3個字符,返回‘ghostwolf1’
SELECT SUBSTR('Hello ghostwolf1', -10, 10) NAME FROM DUAL;

instr 函數:查找字符串位置

語法:instr(String, subString, position, ocurrence)

解釋:

  • String:源字符串
  • subString:要查找的子字符串
  • position:開始的位置,默認從1開始。如果為負數,則從右向左檢索
  • ocurrence:可選項,表示子字符串第幾次出現在源字符串當中,默認第1次,負數則報錯。
--表示從源字符串'city_company_staff'中第1個字符開始查找子字符串'_'第1次出現的位置,返回5
SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_') NAME FROM dual ;   
 
--表示從源字符串'city_company_staff'中第5個字符開始查找子字符串'_'第1次出現的位置,返回5
SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', 5) NAME FROM dual;    
 
--表示從源字符串'city_company_staff'中第5個字符開始查找子字符串'_'第1次出現的位置,返回5
SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', 5, 1) NAME FROM dual;    
 
--表示從源字符串'city_company_staff'中第3個字符開始查找子字符串'_'第2次出現的位置,返回13
SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', 3, 2) NAME FROM dual ;  
 
--start參數為-1,從右向左檢索,查找'_'字符串在源字符串中第1次出現的位置,返回13
SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', -1, 1) NAME FROM dual ;   
 
--start參數為-6,從右向左檢索,查找'_'字符串在源字符串中第2次出現的位置,返回5
SELECT INSTR('ABCD_EFGHIJK_LMNOP', '_', -6, 2) NAME FROM dual  ;  

字符串拼接

“||” 拼接

這個相當於java里面的 “+” 號

SELECT origin_code||'000000' CODE FROM t_origin t WHERE t.leaf='0' AND t.origin_code LIKE '44%00';

輸出結果:

concat() 函數

采用CONCAT進行連接,CONCAT()只允許兩個參數;換言之,一次只能將兩個字串串連起來(如果需要拼接多個字符串,可以進行嵌套)

SELECT CONCAT(origin_code,'000000')  CODE,t.* FROM t_origin t WHERE t.leaf='0' AND t.origin_code LIKE '44%00';

輸出結果:

字符串替換

replace(char, str1, str2):把 char 中 str1 字符串替換為 str2 字符串

-- 將‘123456’中的‘456’替換成‘123’, 返回‘123123’
select replace('123456','456','123') name from dual; 

replace(char, str1):把char 中的 str1 字符串移除

-- 將‘123456’中的‘456’替換掉。返回‘123’
select replace('123456','456') name from dual;

regexp_replace(cstr_sourcear, pattern_str, rep_str):支持正則表達式,用法類似於 replace,但功能更強大

-- 將‘12345654321’中的‘2’替換成‘*’,返回‘1*34566543*1’
select regexp_replace('123456654321','2','*') name from dual; 
--將‘12345654321’中的‘[26]’替換成‘*’,返回‘1*345**543*1’
select regexp_replace('123456654321','[26]','*') name from dual; 

regexp_replace(str_source, pattern_str):把 str_source中的 pattern_str 字符串剔除

--將‘12345654321’中的‘[26]’替換掉,返回‘13455431’
select regexp_replace('123456654321','[26]') name from dual; 

translate(str_source, char1, char2):以字符為單位,把 str_source 中的 chr1 字符對應替換為 chr2。如果 chr1 比chr2 長,那么在 chr1 中而不在 chr2 中的字符將被剔除,因為沒有對應的替換字符。需注意 chr2 不能為 null 或'',否則返回值也為空

--用字符'A'、'B'、'C'對應替換'a','b','c'字符;
select translate('abcc123a','abc','ABC') name from dual;
--'abc'長度為 3,'AB'長度為 2,字符'c'沒有對應的字符來替換,因此被剔除掉;  
select translate('abcc123a','abc','AB') name from dual; 
--剔除掉字符'a'、'b'、'c',translate 有 # 的特殊用法,以 # 開頭的表示所有字符。
select translate('abcc123a','#abc','#') name from dual; 
--先把數字篩選出來,然后用篩選出來的字符串取篩選原來的字符串,結果‘234’
select translate('阿2薩德桑的3股份的4觀點','#'||translate('阿2薩德桑的3股份的4觀點', '#0123456789', '#'),'#') as col from dual;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM