oracle 查詢某個字元最後一次出現的位置
(1)oracle中實現擷取字串:substr
substr(string, start_position, [length])
其中,string是元字串,start_position為開始位置,length是可選項,表示子字串的位數。
例子:substr('abcdefg', 0); -- 返回結果是:abcdefg,從0位開始擷取後面所有
substr('abcdefg', 2); -- 返回結果是:cdefg,從2位開始擷取後面所有
substr('abcdefg', 0, 3); -- 返回結果是:abc,從0位開始往後擷取3個字元長度
substr('abcdefg', 0, 100); -- 返回結果是:abcdefg,雖然100超出了元字串長度,但是系統會按元字串最大數量返回,不會影響返回結果
substr('abcdefg', -3); -- 返回結果是:efg,如果是負數,則從尾部往前數,擷取-3位置往後的所有字串
(2)查詢字串位置:instr
例子:instr('abcdabcdaef', 'ab'); -- 返回結果是:1,因為instr字串索引從1開始,所以是1不是0
instr('abcdabcdaef', 'da', 1, 2); -- 返回結果是:8,返回第二次出現'da'的位置
instr('a bcdabcdaef', 'da', 1, 2); -- 返回結果是:9,由於我在元字串中加了乙個空格,空格仍然算乙個字元
(3)替換字串:replace
replace(str1, str2, str3)
其表示的意思是:在str1中查詢str2,凡是出現str2的地方,都替換成str3。
replace('abcdefg', 'cde', 'cde'); -- 返回結果是:abcdefg
replace('abcdefg', 'cde', ''); -- 返回結果是:abfg,cde被替換成空字元
replace('abcdefg', 'cde'); -- 返回結果是:abfg,當不存在第三個引數時,cde直接被刪掉
本來我還以為oracle中也有系統自帶的那種像split這樣的拆分字串的函式,結果找了好久,發現居然沒有,網上有很多解決方法,我就不總結在這裡了,後面需要的時候視情況來寫。
2023年11月14日補充:
注意,上文提到的substr、instr等方法,至於首位是從0開始開始從1開始,上文中可能會存在一些錯誤,建議在使用的時候首先在資料庫中測試一下從0開始從1。
-- 起始位置引數為負數,從後倒數,但還是向後擷取指定長度的字元。起始引數0,1效果一樣。最後乙個引數為擷取的長度。
-- instr() 起始位置引數不能是0 ,為正數表示從左往右查詢, 為負數表示從右往左查詢。最後乙個引數為第幾次出現
select instr('abcdeabab','a', -1 ,2) from dual;
select instr('abcdeabab','a', -1) from dual;
Oracle常用函式
一 row number over 資料甲 1 select column name column name,data type,2 row number over partition by column name order by column name row num 3 from test c...
Oracle常用函式
數學函式 1.絕對值 o select abs 1 value from dual 2.取整 大 o select ceil 1.001 value from dual 3.取整 小 o select floor 1.001 value from dual 4.取整 擷取 o select trun...
oracle常用函式
1.concat c1,c2均為字串,函式將c2連線到c1的後面,如果c1為null,將返回c2.如果c2為null,則返回c1,如果c1 c2都為null,則返回null。他和操作符 返回的結果相同 select concat slobo svoboda username from dualuse...