我想截取一段字串得后幾位 但是位數不固定,oracle sql 需要怎么寫。。。
比如16_4253116201_3600*1*4這個字串 有可能取后6位 后7位 后8位這個sql怎么寫呢
uj5u.com熱心網友回復:
字串的前半截如果固家,那么截取的目標字串的起始位置就是確定的,截取的長度不確定,但長度可以根據長度和截取的位置進行計算。SUBSTR 截取子串
語法: SUBSTR(string,a[,b])
功能: 回傳從a位置開始的b個字符長的string的一個子字串. 第一個字符的位置是1. 如果a是0,那么它就被認為從第一個字符開始.如果是正數,回傳字符是從左邊向右邊進行計算的.如果b是負數,那么回傳的字符是從string的末尾開始從右向左進行計算的.如果b不存在,那么它將預設的設定為整個字串.如果b小于1,那么將回傳NULL.如果a或b使用了浮點數,那么該數值將在處理進行以前首先被卻為一個整數.
使用位置:程序性陳述句和SQL陳述句。
uj5u.com熱心網友回復:
樓上的計算方式可以,也可以用正則with tmp as
(select '16_4253116201_3600*1*4' as p_str from dual)
select regexp_substr(tmp.p_str,
'[^_]+',
1,
regexp_count(tmp.p_str, '[^_]+'))
from tmp;
uj5u.com熱心網友回復:
可以這樣寫, 不需要用count了
WITH TMP AS
(SELECT '16_4253116201_3600*1*4' AS P_STR FROM DUAL)
SELECT REGEXP_SUBSTR(TMP.P_STR, '[^_]+$', 1, 1) FROM TMP;
uj5u.com熱心網友回復:
謝謝
uj5u.com熱心網友回復:
謝謝~!執行結果我去試一下
uj5u.com熱心網友回復:
配合INSTR寫uj5u.com熱心網友回復:
反向截取(截取后幾位),直接用負數就可以select substr(16_4253116201_3600*1*4,-6) from dual;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/22911.html
標籤:開發
上一篇:ORACLE游標使用問題求解
