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', '_', 3, 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 函數截取字符串

現有需求:數據查詢處理需要對req_param進行"拆分",req_param格式

 

{"appName":"1","logFlag":"h5","url":"https://xxx.cn/xx/appForHtmlFiveAction.do?method=dataShareInfo&source=2&userId=
e8c15fdc6db011ea88370894ef230a09","userId":"e8c15fdc6db011ea88370894ef230a09"
}
--一共分享多少次
select * from sys_access_log sal where sal.req_path like '%uploadH5AccessLog%'and sal.req_param like '%dataShareInfo%'

select count(1) from sys_access_log sal where sal.req_path like '%uploadH5AccessLog%'and sal.req_param like '%dataShareInfo%'


--去重后有多少人
select count(distinct to_char(substr(sal.req_param,instr(sal.req_param,':',-1,1)+2,32))) as userId from sys_access_log sal where

sal.req_path like '%uploadH5AccessLog%'and sal.req_param like '%dataShareInfo%';

 


免責聲明!

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



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