轉載:https://www.cnblogs.com/qmfsun/p/4493918.html
使用Oracle中Instr()和substr()函數:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
在Oracle中可以使用instr函數對某個字符串進行判斷,判斷其是否含有指定的字符。
其語法為:
instr(sourceString,destString,start,appearPosition). instr(
'源字符串'
,
'目標字符串'
,
'開始位置'
,
'第幾次出現'
)
其中sourceString代表源字符串;
destString代表想聰源字符串中查找的子串;
start代表查找的開始位置,該參數可選的,默認為1;
appearPosition代表想從源字符中查找出第幾次出現的destString,該參數也是可選的,默認為1;
如果start的值為負數,那么代表從右往左進行查找,但是位置數據仍然從左向右計算。
返回值為:查找到的字符串的位置。
對於instr函數,我們經常這樣使用:從一個字符串中查找指定子串的位置。例如:
SQL>
select
instr(
'yuechaotianyuechao'
,
'ao'
) position
from
dual;
POSITION
----------
6
從第7個字符開始搜索<br>
SQL>
select
instr(
'yuechaotianyuechao'
,
'ao'
, 7) position
from
dual;
POSITION
----------
17
從第1個字符開始,搜索第2次出現子串的位置<br>
SQL>
select
instr(
'yuechaotianyuechao'
,
'ao'
, 1, 2) position
from
dual;
POSITION
----------
17<br><br>------------------------------------------------------------- <br><br>對於instr函數,我們經常這樣使用:從一個字符串中查找指定子串的位置。例如: <br><br>SQL>
select
instr(
'abcdefgh'
,
'de'
) position
from
dual; <br><br><br>POSITION <br>---------- <br>4 <br>從1開始算 d排第四所以返回4 <br><br>SQL>
select
instr(
'abcdefghbc'
,
'bc'
,3) position
from
dual; <br><br>POSITION <br>---------- <br>9 <br>從第3個字符開始算起 第3個字符是c,所以從3開始以后的字符串找查找bc,返回9 <br><br>--------------------------- <br>從第1個字符開始,查找第2次出現子串的位置 <br>SQL>
select
instr(
'qinyinglianqin'
,
'qin'
, 1, 2) position
from
dual; <br>POSITION <br>---------- <br>12 <br><br>----------------------------------------------------------------------
注意:1。若‘起始位置’=0 時返回結果為0,
2。這里只有三個參數,意思是查找第一個要查找字符的位置(因為 ‘第幾次出現’默認為1),
當‘起始位置’不大於要查找的第一個字符的位置時,返回的值都將是第一個字符的位置,如果‘起始位置’大於要查找的第一個字符的位置時,返回的值都將是第2個字符的位置,依此類推……(但是也是以第一個字符開始計數)
<br><br><br>
substr函數的用法,取得字符串中指定起始位置和長度的字符串 ,默認是從起始位置到結束的子串。
substr(
string
, start_position, [ length ] ) substr(
'目標字符串'
,開始位置,長度)
如:
substr(
'This is a test'
, 6, 2) would
return
'is'
substr(
'This is a test'
, 6) would
return
'is a test'
substr(
'TechOnTheNet'
, -3, 3) would
return
'Net'
substr(
'TechOnTheNet'
, -6, 3) would
return
'The'
select
substr(
'Thisisatest'
, -4, 2) value
from
dual<br><br><br>SUBSTR()函數 <br>1.用處:是從給定的字符表達式或備注字段中返回一個子字符串。 <br><br>2.語法格式:SUBSTR(cExpression,nStartPosition [,nCharactersReturned]) <br><br>其中,cExpression指定要從其中返回字符串的字符表達式或備注字段; <br><br>nStartPosition用於指定返回的字符串在字符表達式或備注字段中的位置, <br><br>nCharactersReturned用於指定返回的字符數目,缺省時返回字符表達式的值結束前的全部字符。 <br><br>3.舉例:STORE
'abcdefghijlkm'
To mystring <br><br>SUBSTR(mystring ,1,5) 顯示
"abcde"
1 從第一個字符開始 截取的字符中,包括第一個字符 <br><br>SUBSTR(mystring ,6) 顯示
"fghijklm"
<br><br>SUBSTR(mystring,-2)顯示“km” 最右邊一個字符是-1,最右邊左邊的字符是-2,然后默認是從左向有取剩下的全部的字符 <br><br>SUBSTR(mystrng,-4)顯示“jlkm”
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
oracle截取字符串
將 C3411.907w15 截取點號之前的字符串 C3411 SUBSTR (
'C3411.907w15'
, 0, INSTR (
'C3411.907w15, '
.', 1, 1) - 1)
SELECT SUBSTR (
'C3411.907w15'
, 0, INSTR (
'C3411.907w15, '
.', 1, 1) - 1)
www.2cto.com
FROM DUAL
將 C3411.907w15 截取點號之后 的字符串 907w15 SUBSTR (
'C3411.907w15'
, INSTR (
'C3411.907w15'
,
'.'
, 1, 1)+1)
SELECT SUBSTR (
'C3411.907w15'
, INSTR (
'C3411.907w15'
,
'.'
, 1, 1)+1)
FROM DUAL
|
項目應用實例:
原始字符串:
原始字段中存在7個“_”,我現在只想取出最后一個“_”后面的字符串,該怎么解決呢?
分兩步:
第一步,通過Instr()函數,找到第7個“_”字符:
select instr('Q房網集團_經紀事業部_華南區_深圳世華_營業部_南山前海區_前海中心片區_前海五分店','_', 1, 7) fdisplayname from SHENZHENJM1222.B
或者:
select instr('Q房網集團_經紀事業部_華南區_深圳世華_營業部_南山前海區_前海中心片區_前海五分店', '_', -1, 1) fdisplayname FROM SHENZHENJM1222.B
兩者效果一樣,下面的-1,表示從右邊開始算起始字符,1表示獲取第一個“_”
獲取到的結果如圖:
第2步,通過substr()函數,取出所需要的字段:
select substr(fdisplayname,instr(fdisplayname,'_',-1,1)+1) fdisplayname from SHENZHENJM1222.B
fdisplayname:代表字段名,相當於元字符串
重點介紹一下+1
+1表示在目標字符串“_”后的第一個字符串開始截取
下面看一下不同的數字的情況:
select substr(fdisplayname,instr(fdisplayname,'_',-1,1)+1) fdisplayname from SHENZHENJM1222.B
在來看一下instr(fdisplayname,'_',-1,1)中的1是啥意思:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
Oracle中INSTR和SUBSTR的用法
Oracle中INSTR的用法:
INSTR方法的格式為
INSTR(源字符串, 要查找的字符串, 從第幾個字符開始, 要找到第幾個匹配的序號)
返回找到的位置,如果找不到則返回0.
例如:INSTR(
'CORPORATE FLOOR'
,
'OR'
, 3, 2)中,源字符串為
'CORPORATE FLOOR'
, 在字符串中查找
'OR'
,從第三個字符位置開始查找
"OR"
,取第三個字后第2個匹配項的位置。
默認查找順序為從左到右。當起始位置為負數的時候,從右邊開始查找。
所以SELECT INSTR(
'CORPORATE FLOOR'
,
'OR'
, -1, 1)
"aaa"
FROM DUAL的顯示結果是
Instring
——————
14
oracle的substr函數的用法:
取得字符串中指定起始位置和長度的字符串 substr(
string
, start_position, [ length ] )
如:
substr(
'This is a test'
, 6, 2) would
return
'is'
substr(
'This is a test'
, 6) would
return
'is a test'
substr(
'TechOnTheNet'
, -3, 3) would
return
'Net'
substr(
'TechOnTheNet'
, -6, 3) would
return
'The'
select
substr(
'Thisisatest'
, -4, 2) value
from
dual
綜合應用:
SELECT INSTR(
'CORPORATE FLOOR'
,
'OR'
, -1, 1)
"Instring"
FROM DUAL
--INSTR(源字符串, 目標字符串, 起始位置, 匹配序號)
SELECT INSTR(
'CORPORATE FLOOR'
,
'OR'
, 3, 2)
"Instring"
FROM DUAL
SELECT INSTR(
'32.8,63.5'
,
','
, 1, 1)
"Instring"
FROM DUAL
SELECT SUBSTR(
'32.8,63.5'
,INSTR(
'32.8,63.5'
,
','
, 1, 1)+1)
"INSTRING"
FROM DUAL
SELECT SUBSTR(
'32.8,63.5'
,1,INSTR(
'32.8,63.5'
,
','
, 1, 1)-1)
"INSTRING"
FROM DUAL
-- CREATED ON 2008-9-26 BY ADMINISTRATOR
DECLARE
-- LOCAL VARIABLES HERE
T VARCHAR2(2000);
S VARCHAR2(2000);
NUM INTEGER;
I INTEGER;
POS INTEGER;
BEGIN
-- TEST STATEMENTS HERE
T :=
'12.3,23.0;45.6,54.2;32.8,63.5;'
;
SELECT LENGTH(T) - LENGTH(REPLACE(T,
';'
,
''
)) INTO NUM FROM DUAL;
DBMS_OUTPUT.PUT_LINE(
'NUM:'
|| NUM);
POS := 0;
FOR I IN 1 .. NUM LOOP
DBMS_OUTPUT.PUT_LINE(
'I:'
|| I);
DBMS_OUTPUT.PUT_LINE(
'POS:'
|| POS);
DBMS_OUTPUT.PUT_LINE(
'==:'
|| INSTR(T,
';'
, 1, I));
DBMS_OUTPUT.PUT_LINE(
'INSTR:'
|| SUBSTR(T, POS + 1, INSTR(T,
';'
, 1, I) - 1));
POS := INSTR(T,
';'
, 1, I);
END LOOP;
END;
-- Created
on
2008-9-26
by
ADMINISTRATOR
declare
-- Local variables here
i integer;
T VARCHAR2(2000);
S VARCHAR2(2000);
begin
-- Test statements here
--歷史狀態
T :=
'12.3,23.0;45.6,54.2;32.8,63.5;'
;
IF (T IS NOT NULL) AND (LENGTH(T) > 0) THEN
--T := T ||
','
;
WHILE LENGTH(T) > 0 LOOP
--ISTATUSID := 0;
S := TRIM(SUBSTR(T, 1, INSTR(T,
';'
) - 1));
IF LENGTH(S) > 0 THEN
DBMS_OUTPUT.PUT_LINE(
'LAT:'
||SUBSTR(
'32.8,63.5'
,1,INSTR(
'32.8,63.5'
,
','
, 1, 1)-1));
DBMS_OUTPUT.PUT_LINE(
'LON:'
||SUBSTR(
'32.8,63.5'
,INSTR(
'32.8,63.5'
,
','
, 1, 1)+1));
-- COMMIT;
END IF;
T := SUBSTR(T, INSTR(T,
';'
) + 1);
END LOOP;
END IF;
end;
|
1
2
3
4
5
6
7
8
|
就是在表中有一個字段,最開始的是[XXXX]字樣,我要如何操作,才能獲得[]中字符?
select
substr(
'[xxxx]'
, instr(
'[xxxx]'
,
'['
) + 1, instr(
'[xxxx]'
,
']'
) - instr(
'[xxxx]'
,
'['
) -1 )
from
dual
您的需要就是去掉[]而獲得[]之間的字符對吧
其實很簡單,有一個截取字符的函數substr(
'string'
,n,m) 其中
'string'
是目標字符串,n為截取的起始位置,m為結束的位置。
例如:
select
substr(
'[xxxx]'
, 2, 4)
from
表名;意思就是對[xxxx]從第二個位置開始截取4個字符。
結果就是 xxxx <br><br>比如數據庫有個字段為 tellsid,存儲值的格式為 <br>
"湖北_5874"
我想單獨讀取這個字段里下橫線后面的部分並轉換為數字 要怎么實現啊?<br>后面數字部分是序列產生的, 前面部分是地區名,都沒有固定的長度<br><br>首先用instr檢查
'_'
的位置,再substr就ok了。<br><br>SELECT to_number(substr(tellsid,<br> instr(tellsid,
'_'
, 1) + 1))<br> FROM your_tablename;<br><br>如果版本是10g以上,試試這個:<br>SELECT to_number(regexp_substr(tellsid,
'[0-9]{1,}'
, 1))<br> FROM your_tablename;<br><br>regexp_substr(
'fdaf_4556'
,
'[[:digit:]]+'
),還是感覺這個好點。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
INSTR
(源字符串, 目標字符串, 起始位置, 匹配序號)
在Oracle/PLSQL中,instr函數返回要截取的字符串在源字符串中的位置。只檢索一次,就是說從字符的開始
到字符的結尾就結束。
語法如下:
instr( string1, string2 [, start_position [, nth_appearance ] ] )
參數分析:
string1
源字符串,要在此字符串中查找。
string2
要在string1中查找的字符串.
start_position
代表string1 的哪個位置開始查找。此參數可選,如果省略默認為1. 字符串索引從1開始。如果此參數為正,從左到右開始檢索,如果此參數為負,從右到左檢索,返回要查找的字符串在源字符串中的開始索引。
nth_appearance
代表要查找第幾次出現的string2. 此參數可選,如果省略,默認為 1.如果為負數系統會報錯。
注意:
如果String2在String1中沒有找到,instr函數返回0.
示例:
SELECT instr(
'syranmo'
,
's'
) FROM dual; -- 返回 1
SELECT instr(
'syranmo'
,
'ra'
) FROM dual; -- 返回 3
1 SELECT instr(
'syran mo'
,
'a'
,1,2) FROM dual; -- 返回 0
(根據條件,由於a只出現一次,第四個參數2,就是說第2次出現a的位置,顯然第2次是沒有再出現了,所以結果返回0。注意空格也算一個字符!)
SELECT instr(
'syranmo'
,
'an'
,-1,1) FROM dual; -- 返回 4
(就算是由右到左數,索引的位置還是要看‘an’的左邊第一個字母的位置,所以這里返回4)
SELECT instr(
'abc'
,
'd'
) FROM dual; -- 返回 0
注:也可利用此函數來檢查String1中是否包含String2,如果返回0表示不包含,否則表示包含。
對於上面說到的,我們可以這樣運用instr函數。請看下面示例:
如果我有一份資料,上面都是一些員工的工號(字段:CODE),可是我現在要查詢出他們的所有員工情況,例如名字,部門,職業等等,這里舉例是兩個員工,工號分別是’A10001′,’A10002′,其中假設staff是員工表,那正常的做法就如下:
1 2 SELECT code , name , dept, occupation FROM staff WHERE code IN (
'A10001'
,
'A10002'
);
或者:
SELECT code , name , dept, occupation FROM staff WHERE code =
'A10001'
OR code =
'A10002'
;
有時候員工比較多,我們對於那個’覺得比較麻煩,於是就想,可以一次性導出來么?這時候你就可以用instr函數,如下:
SELECT code , name , dept, occupation FROM staff WHERE instr(
'A10001,A10002'
,code)>0;
查詢出來結果一樣,這樣前后只用到兩次單引號,相對方便點。
還有一個用法,如下:
SELECT code, name, dept, occupation FROM staff WHERE instr(code,
'001'
) > 0;
等同於
SELECT code, name, dept, occupation FROM staff WHERE code LIKE
'%001%'
;<br><br><br><br>
|
instr(string1,string2[,start_position[,nth_appearence]])
string1:要在此字符串中查找。
string2:要在string1中查找的字符串。
start_position:從string1開始查找的位置。可選,默認為1,正數時,從左到右檢索,負數時,從右到左檢索。
nth_appearence:查找第幾次出現string2。可選,默認為1,不能為負。
注:如果沒有查找到,返回0。
例如:
select instr('abcd','a') from dual; --返回1 select instr('abcd','c') from dual; --返回3 select instr('abcd','e') from dual; --返回0
該函數可以用於模糊查詢以及判斷包含關系:
例如:
① select code, name, dept, occupation from staff where instr(code, '001') > 0;
等同於
select code, name, dept, occupation from staff where code like '%001%' ;
② select ccn,mas_loc from mas_loc where instr('FH,FHH,FHM',ccn)>0;
等同於
select ccn,mas_loc from mas_loc where ccn in ('FH','FHH','FHM');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
INSTR(源字符串, 目標字符串, 起始位置, 匹配序號) :
在Oracle/PLSQL中,instr函數返回要截取的字符串在源字符串中的位置。只檢索一次,就是說從字符的開始到字符的結尾就結束。
一、語法如下:
instr( string1, string2 [, start_position [, nth_appearance ] ] )
1>參數分析:
①string1:源字符串,要在此字符串中查找。
②string2:要在string1中查找的字符串.
③start_position:代表string1 的哪個位置開始查找。
注:此參數可選,如果省略默認為1. 字符串索引從1開始。
如果此參數為正,從左到右開始檢索。
如果此參數為負,從右到左檢索,返回要查找的字符串在源字符串中的開始索引。
④nth_appearance:代表要查找第幾次出現的string2.
注:此參數可選,如果省略,默認為 1.如果為負數系統會報錯。
注意:如果String2在String1中沒有找到,instr函數返回0.
2>示例:
SELECT instr(
'syranmo'
,
's'
) FROM dual; -- 返回 1
SELECT instr(
'syranmo'
,
'ra'
) FROM dual; -- 返回 3
SELECT instr(
'syran mo'
,
'a'
,1,2) FROM dual; -- 返回 0
SELECT instr(
'syranmo'
,
'an'
,-1,1) FROM dual; -- 返回 4
SELECT instr(
'abc'
,
'd'
) FROM dual; -- 返回 0
二、其他應用實例:
1>從staff表查詢工號code分別是’A10001′,’A10002′的員工:
①SELECT code , name , dept, occupation FROM staff WHERE code IN (
'A10001'
,
'A10002'
);
②SELECT code , name , dept, occupation FROM staff WHERE code =
'A10001'
OR code =
'A10002'
;
③SELECT code , name , dept, occupation FROM staff WHERE instr(
'A10001,A10002'
,code)>0;
這種用法時常被用於存儲過程,將范圍字符串作為參數傳入。如果使用①的SQL寫法,將拼好的字符串傳入直接使用,則存儲過程會報錯。此時會用這種方法查找,傳入的拼好字符串便可直接使用。
2>模糊查詢:
①SELECT code, name, dept, occupation FROM staff WHERE code LIKE
'%001%'
;
②SELECT code, name, dept, occupation FROM staff WHERE instr(code,
'001'
) > 0;
|
簡述
今天在寫 sql時遇到一個情況,表 A中的 ID 是按照 TREE結構存儲的。現在需要和表 B中的 NODE_ID連接,取出 B中 NODE_ID可以和 A中任意一個 level的 NODE_ID連接的信息。但是表 B中的 NODE_ID 具體對應到表 A中哪個 level是未知的。對此,最先想到使用的是 OR運算,但是由於效率太低,速度很慢,后來使用 INSTR代替,查詢速度得到明顯提高。
表結構
表 A - A_SEQ_ID, LVL1_NODE_ID, LVL2_NODE_ID, LVL3_NODE_ID, LVL4_NODE_ID, LVL5_NODE_ID, LVL6_NODE_ID, LVL7_NODE_ID, LVL8_NODE_ID, LVL9_NODE_ID, LVL10_NODE_ID
表 B - B_SEQ_ID, NODE_ID, INFO
開始時的 sql
01.
SELECT *
02.
FROM A, B
03.
WHERE A.LVL1_NODE_ID = B.NODE_ID OR
04.
A.LVL2_NODE_ID = B.NODE_ID OR
05.
A.LVL3_NODE_ID = B.NODE_ID OR
06.
A.LVL4_NODE_ID = B.NODE_ID OR
07.
A.LVL5_NODE_ID = B.NODE_ID OR
08.
A.LVL6_NODE_ID = B.NODE_ID OR
09.
A.LVL7_NODE_ID = B.NODE_ID OR
10.
A.LVL8_NODE_ID = B.NODE_ID OR
11.
A.LVL9_NODE_ID = B.NODE_ID OR
12.
A.LVL10_NODE_ID = B.NODE_ID;
這條 sql雖然可以達到最終的目的,但是由於表 A和表 B的數據量比較大,所以執行起來相當慢。
使用 Instr函數
1.
SELECT *
2.
FROM A, B
3.
WHERE instr(
4.
(
','
||A.LVL1_NODE_ID||
','
||A.LVL2_NODE_ID||
','
||A.LVL3_NODE_ID||
5.
','
||A.LVL4_NODE_ID||
','
||A.LVL5_NODE_ID||
','
||A.LVL6_NODE_ID||
6.
','
||A.LVL7_NODE_ID||
','
||A.LVL8_NODE_ID||
','
||A.LVL9_NODE_ID||
7.
','
||A.LVL10_NODE_ID),
8.
','
||B.NODE_ID||
','
) >
0
;
比起 OR語句一個字段一個字段的比較,instr函數更加高效。當 instr函數匹配到子串的時候就會返回子串在源字符串中的位置,所以這里用 大於0 即表示在表 A的源字符串中可以找到表 B的 NODE_ID (子串或源字符串為 NULL時返回 NULL)。
注:給每個字段加上逗號(',')的原因是匹配的一種方法,例如源數據是 1,2,3,13. 子串是 23.如果直接拼接的話,源字符串就變成 '12313',用instr('12313', '23') 明顯可以匹配成功,但事實並非如此。所以換成給每個字符兩邊都加上逗號,不僅匹配字符也匹配其兩邊的逗號 - instr(',1,2,3,13,', '23')。
Oracle Instr 函數
其中: INSTR 接受 characters格式的輸入字符集,返回 characters格式的子串位置,位置索引從 1開始; INSTRB 使用 bytes 而非 characters; INSTRC 使用 Unicode complete characters; INSTR2 使用UCS2 code points; INSTR4 使用UCS4 code points。
對於源字符串,除了INSTRC, INSTR2, 和 INSTR4 不允許CLOB 和 NCLOB 類型外,其他兩個函數的源字符串接受CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB 或 NCLOB等任意數據類型。
instr 語法如下: instr( string1, string2, start_position,nth_appearance )
string1 | 源字符串,要在此字符串中查找。 |
string2 | 要在string1中查找的字符串 。 |
start_position | 代表string1 的哪個位置開始查找。此參數可選,如果省略默認為1. 字符串索引從1開始。如果此參數為正,從左到右開始檢索,如果此參數為負,從右到左檢索,返回要查找的字符串在源字符串中的開始索引。 |
nth_appearance | 代表要查找第幾次出現的string2. 此參數可選,如果省略,默認為 1.如果為負數系統會報錯。 |
注意: 如果String2在String1中沒有找到,instr函數返回0。 示例: SELECT instr('syranmo','s') FROM dual; -- 返回 1 SELECT instr('syranmo','ra') FROM dual; -- 返回 3 SELECT instr('syran mo','a',1,2) FROM dual; -- 返回 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
oracle 截取字符(substr),檢索字符位置(instr)
case
when then
else
end語句使用 收藏
常用函數:substr和instr
1.SUBSTR(
string
,start_position,[length]) 求子字符串,返回字符串
解釋:
string
元字符串
start_position 開始位置(從0開始)
length 可選項,子字符串的個數
For example:
substr(
"ABCDEFG"
, 0);
//返回:ABCDEFG,截取所有字符
substr(
"ABCDEFG"
, 2);
//返回:CDEFG,截取從C開始之后所有字符
substr(
"ABCDEFG"
, 0, 3);
//返回:ABC,截取從A開始3個字符
substr(
"ABCDEFG"
, 0, 100);
//返回:ABCDEFG,100雖然超出預處理的字符串最長度,但不會影響返回結果,系統按預處理字符串最大數量返回。
substr(
"ABCDEFG"
, -3);
//返回:EFG,注意參數-3,為負值時表示從尾部開始算起,字符串排列位置不變。
2.INSTR(
string
,subString,position,ocurrence)查找字符串位置
解釋:
string
:源字符串
subString:要查找的子字符串
position:查找的開始位置
ocurrence:源字符串中第幾次出現的子字符串
For example:
INSTR(
'CORPORATE FLOOR'
,
'OR'
, 3, 2)中,源字符串為
'CORPORATE FLOOR'
, 目標字符串為
'OR'
,起始位置為3,取第2個匹配項的位置;返回結果為 14 '
|
1
2
3
|
oralce查詢字符串截取<br>
select
substr(
'XIHE@GXCOURT.GX'
,instr(
'XIHE@GXCOURT.GX'
,
'@'
)+1)
from
dual<br>
字段loginname=
'XIHE@GXCOURT.GX'
截取@后面的內容不包括@<br><br><br>sql :charindex(
'字符串'
,字段)>0 charindex(
'administrator'
,MUserID)>0 <br><br><br>oracle:instr(字段,
'字符串'
,1,1) >0 instr(MUserID,
'administrator'
,1,1)>0 <br><br><br>在項目中用到了Oracle中 Instr 這個函數,順便仔細的再次學習了一下這個知識。 <br><br>Oracle中,可以使用 Instr <br>函數對某個字符串進行判斷,判斷其是否含有指定的字符。 <br><br>其語法為: <br>Instr(
string
, substring, position, <br>occurrence) <br>其中 <br><br>
string
:代表源字符串; <br><br>substring:代表想聰源字符串中查找的子串; <br><br><br>position:代表查找的開始位置,該參數可選的,默認為 1; <br><br><br>occurrence:代表想從源字符中查找出第幾次出現的substring,該參數也是可選的,默認為1; <br>如果 position <br>的值為負數,那么代表從右往左進行查找。 <br>返回值為:查找到的字符串的位置。 <br><br>對於 Instr <br>函數,我們經常這樣使用:從一個字符串中查找指定子串的位置。 <br><br>例如: <br><br>SELECT Instr(
'Hello Word'
, <br>
'o'
, -1, 1)
"String"
FROM Dual 的顯示結果是 <br><br>Instring <br>———— <br>8
|