oracle常用函式

2021-10-05 00:19:08 字數 4808 閱讀 5954

需求:對複雜json格式的文字型別進行拆分,拿到特定的值!

因為oracle11g版本 不支援json型別, 所以就手動使用最原始的方法,用基本函式來操作

格式1: substr(string string, int a, int b);

格式2:substr(string string, int a) ;

解析:

格式1:

1、string 需要擷取的字串

2、a 擷取字串的開始位置(注:當a等於0或1時,都是從第一位開始擷取)

3、b 要擷取的字串的長度

格式2:

1、string 需要擷取的字串

2、a 可以理解為從第a個字元開始擷取後面所有的字串。

格式1:
1、select substr(

'helloworld',0

,3)value

from dual;

//返回結果:hel,擷取從「h」開始3個字元

2、select substr(

'helloworld',1

,3)value

from dual;

//返回結果:hel,擷取從「h」開始3個字元

3、select substr(

'helloworld',2

,3)value

from dual;

//返回結果:ell,擷取從「e」開始3個字元

4、select substr(

'helloworld',0

,100

)value

from dual;

//返回結果:helloworld,100雖然超出預處理的字串最長度,但不會影響返回結果,系統按預處理字串最大數量返回。

5、select substr(

'helloworld',5

,3)value

from dual;

//返回結果:owo

6、select substr(

'hello world',5

,3)value

from dual;

//返回結果:o w (中間的空格也算乙個字串,結果是:o空格w)

7、select substr(

'helloworld',-

1,3)

value

from dual;

//返回結果:d (從後面倒數第一位開始往後取1個字元,而不是3個。原因:下面紅色 第三個註解)

8、select substr(

'helloworld',-

2,3)

value

from dual;

//返回結果:ld (從後面倒數第二位開始往後取2個字元,而不是3個。原因:下面紅色 第三個註解)

9、select substr(

'helloworld',-

3,3)

value

from dual;

//返回結果:rld (從後面倒數第三位開始往後取3個字元)

10、select substr(

'helloworld',-

4,3)

value

from dual;

//返回結果:orl (從後面倒數第四位開始往後取3個字元)```

(注:當a等於0或1時,都是從第一位開始擷取(如:1和2)) (注:假如helloworld之間有空格,那麼空格也將算在裡面(如:5和6))

(注:雖然7、8、9、10擷取的都是3個字元,結果卻不是3 個字元; 只要 |a| ≤ b,取a的個數(如:7、8、9);當 |a| ≥b時,才取b的個數,由a決定擷取位置(如:9和10))

格式2
11、select substr(

'helloworld',0

)value

from dual;

//返回結果:helloworld,擷取所有字元

12、select substr(

'helloworld',1

)value

from dual;

//返回結果:helloworld,擷取所有字元

13、select substr(

'helloworld',2

)value

from dual;

//返回結果:elloworld,擷取從「e」開始之後所有字元

14、select substr(

'helloworld',3

)value

from dual;

//返回結果:lloworld,擷取從「l」開始之後所有字元

15、select substr(

'helloworld',-

1)value

from dual;

//返回結果:d,從最後乙個「d」開始 往回擷取1個字元

16、select substr(

'helloworld',-

2)value

from dual;

//返回結果:ld,從最後乙個「d」開始 往回擷取2個字元

17、select substr(

'helloworld',-

3)value

from dual;

//返回結果:rld,從最後乙個「d」開始 往回擷取3個字元

(注:當只有兩個引數時;不管是負幾,都是從最後乙個開始 往回擷取(如:15、16、17))

1 instr()函式的格式 (俗稱:字元查詢函式)
格式一:instr( string1, string2 )    // instr(源字串, 目標字串)
2 例項

格式一

1

select instr(

'helloworld'

,'l'

)from dual;

--返回結果:3 預設第一次出現「l」的位置

2select instr(

'helloworld'

,'lo'

)from dual;

--返回結果:4 即「lo」同時(連續)出現,「l」的位置

3select instr(

'helloworld'

,'wo'

)from dual;

--返回結果:6 即「w」開始出現的位置

格式二

select instr(

'helloworld'

,'l',2

,2)from dual;

--返回結果:4 也就是說:在"helloworld"的第2(e)號位置開始,查詢第二次出現的「l」的位置

select instr(

'helloworld'

,'l',3

,2)from dual;

--返回結果:4 也就是說:在"helloworld"的第3(l)號位置開始,查詢第二次出現的「l」的位置

select instr(

'helloworld'

,'l',4

,2)from dual;

--返回結果:9 也就是說:在"helloworld"的第4(l)號位置開始,查詢第二次出現的「l」的位置

select instr(

'helloworld'

,'l',-

1,1)

from dual;

--返回結果:9 也就是說:在"helloworld"的倒數第1(d)號位置開始,往回查詢第一次出現的「l」的位置

select instr(

'helloworld'

,'l',-

2,2)

from dual;

--返回結果:4 也就是說:在"helloworld"的倒數第2(l)號位置開始,往回查詢第二次出現的「l」的位置

select instr(

'helloworld'

,'l',2

,3)from dual;

--返回結果:9 也就是說:在"helloworld"的第2(e)號位置開始,查詢第三次出現的「l」的位置

select instr(

'helloworld'

,'l',-

2,3)

from dual;

--返回結果:3 也就是說:在"helloworld"的倒數第2(l)號位置開始,往回查詢第三次出現的「l」的位置

函式說明:獲取特定字串在字串**現的次數

語法: regexp_count(source_str, target_char [, position [, match_param]])

source_str:包含特定字元的字串

target_char:特定字元

position: 從哪個下標開始搜尋,可省略,但=1

match_param: 正則的匹配模式引數, 'i':忽略大小寫; 『c』或不配置該引數:不忽略大小寫;此外還有『n』、『m』、『x』等引數。

例項
select regexp_count(

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...