字符串截取
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;