sql常用函式instr()和substr()
阿新 • • 發佈:2019-02-09
在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個字元開始搜尋
SQL> select instr('yuechaotianyuechao','ao', 7) position from dual;
POSITION
----------
17
從第1個字元開始,搜尋第2次出現子串的位置
SQL> select instr('yuechaotianyuechao','ao', 1, 2) position from dual;
POSITION
----------
17
注意:1。若‘起始位置’=0 時返回結果為0,
2。這裡只有三個引數,意思是查詢第一個要查詢字元的位置(因為 ‘第幾次出現’預設為1),
當‘起始位置’不大於要查詢的第一個字元的位置時,返回的值都將是第一個字元的位置,如果‘起始位置’大於要查詢的第一個字元的位置時,返回的值都將是第2個字元的位置,依此類推……(但是也是以第一個字元開始計數)
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
-------------------------------------------------------------------------------------------------
關於Instr()和substr()函式-
INSTR共有4個引數;具體格式為:
INSTR(strings|express,strings[,m,[n]])
在一個字串中搜索指定的字元,返回發現指定的字元的位置;
strings|express 被搜尋的字串
strings 希望搜尋的字串
m 搜尋的開始位置,預設為1
n 第n次出現希望搜尋的字串的位置,預設為1
1.被搜尋的字串可以為字串,也可以為表示式
如:
QUOTE:
SQL> select instr('my 2 firefly','i') result from dual;
RESULT
----------
7
SQL> select instr(initcap('my 2 firefly')||'b','Fi') result from dual;
RESULT
----------
6
2.希望搜尋的字串可以為字元或數字字元,(希望搜尋的字串長度可以1個或多個)
如:
QUOTE:
SQL> select instr('my 2 firefly','i') result from dual;
RESULT
----------
7
SQL> select instr('my 2 firefly','iref') result from dual;
RESULT
----------
7
SQL> select instr('my 2 firefly',2) result from dual;
RESULT
----------
4
SQL> select instr('my 2 firefly',22) result from dual;
RESULT
----------
0
3.m表示要從第幾個字元開始查詢
如:
QUOTE:
SQL> select instr('my 2 firefly','f',1) result from dual;
RESULT
----------
6
注意:若m=0時返回結果為0
select instr('my 2 firefly','f',0) result from dual;
RESULT
----------
0
注意:這裡只有三個引數,意思是查詢第一個要查詢字元的位置(因為n預設為1),
當m不大於要查詢的第一個字元的位置時,返回的值都將是第一個字元的位置,如果m大於要查詢的第一個字元的位置時,返回的值都將是第2個字元的位置,依此類推……
如:
QUOTE:
SQL> select instr('my 2 firefly','f',1) result from dual;
RESULT
----------
6
SQL> select instr('my 2 firefly','f',3) result from dual;
RESULT
----------
6
SQL> select instr('my 2 firefly','f',6) result from dual;
RESULT
----------
6
SQL> select instr('my 2 firefly','f',7) result from dual;
RESULT
----------
10
SQL> select instr('my 2 firefly','f',10) result from dual;
RESULT
----------
10
當m大於要查詢字元的最大的位置時,返回0
QUOTE:
SQL> select instr('my 2 firefly','f',11) result from dual;
RESULT
----------
0
SQL> select instr('my 2 firefly','f',110) result from dual;
RESULT
----------
0
反之亦然,若m<0,則表示從右向左來查詢資料
QUOTE:
SQL> select instr('my 2 firefly','f',-1) result from dual;
RESULT
----------
10
SQL> select instr('my 2 firefly','f',-2) result from dual;
RESULT
----------
10
SQL> select instr('my 2 firefly','f',-4) result from dual;
RESULT
----------
6
SQL> select instr('my 2 firefly','f',-40) result from dual;
RESULT
----------
0
4.n表示要找第n個該字元
如:
QUOTE:
SQL> select instr('my 2 firefly','f',1,1) result from dual;
RESULT
----------
6
SQL> select instr('my 2 firefly','f',1,2) result from dual;
RESULT
----------
10
SQL> select instr('my 2 firefly','f',1,3) result from dual;
RESULT
----------
0
當n大於查詢源中包含所要查詢字串的最大個數時,返回0
如:
QUOTE:
SQL> select instr('my 2 firefly','f',1,4) result from dual;
RESULT
----------
0
SQL> select instr('my 2 firefly','f',1,40) result from dual;
RESULT
----------
0
當m<0時,表示從右向左查詢,如:
QUOTE:
SQL> select instr('my 2 firefly','f',-10,1) result from dual;
RESULT
----------
0
SQL> select instr('my 2 firefly','f',-8,1) result from dual;
RESULT
----------
0
SQL> select instr('my 2 firefly','f',-3,1) result from dual;
RESULT
----------
10
注意:當m不大於要查詢的第一個字元的位置時,返回的值都將是第一個字元的位置,如果m大於要查詢的第一個字元的位置時,返回的值都將是第2個字元的位置,依此類推……
如:
QUOTE:
SQL> select instr('my 2 firefly','f',-4,1) result from dual;
RESULT
----------
6
等同於:
SQL> select instr('my 2 firefly','f',-1,2) result from dual;
RESULT
----------
6
另注意:如果要查詢的字串為 NULL時,返回NULL
如:
SQL> select instr('my 2 firefly',null,-1,2) result from dual;
RESULT
----------
SQL> select instr('my 2 firefly',null) result from dual;
RESULT
----------
SQL> select instr('my 2 firefly',null,1) result from dual;
RESULT
----------
QUOTE:
================================================
字串擷取函式**substr(strings|express,m,[n])**
strings|express 被擷取的字串或字串表示式
m 從第m個字元開始擷取
n 擷取後字串長度為n
1.被擷取的為字串或字串表示式
QUOTE:
SQL> select substr(upper('abcde'),1,2) from dual;
SUBSTR(UPPER('ABCDE'),1,2)
--------------------------
AB
SQL> select substr('abcde',1,2) from dual;
SUBSTR('ABCDE',1,2)
-------------------
ab
2.如果m<0,則表示從右向左擷取
這裡如果n>0,若n>=|m|,擷取字串長度為|m|個(從右向左擷取),
若n<|m|,擷取字串長度為n個(從右向左擷取)
如:
QUOTE:
SQL> select substr('abcde',-4,2) from dual;
SUBSTR('ABCDE',-4,2)
--------------------
bc
SQL> select substr('abcde',-4,1) from dual;
SUBSTR('ABCDE',-4,1)
--------------------
b
SQL> select substr('abcde',-4,4) from dual;
SUBSTR('ABCDE',-4,4)
--------------------
bcde
SQL> select substr('abcde',-4,5) from dual;
SUBSTR('ABCDE',-4,5)
--------------------
bcde
SQL> select substr('abcde',-4,50) from dual;
SUBSTR('ABCDE',-4,50)
---------------------
bcde
如果m<0,n=0結果為NULL:
QUOTE:
SQL> select substr('abcde',-4,0) from dual;
SUBSTR('ABCDE',-4,0)
--------------------
SQL> select substr('abcde',-5,0) from dual;
SUBSTR('ABCDE',-5,0)
--------------------
如果m<0,n<0結果為NULL:
QUOTE:
SQL> select substr('abcde',-2,0) from dual;
SUBSTR('ABCDE',-2,0)
--------------------
SQL> select substr('abcde',-2,-1) from dual;
SUBSTR('ABCDE',-2,-1)
---------------------
SQL> select substr('abcde',-2,-4) from dual;
SUBSTR('ABCDE',-2,-4)
---------------------
SQL> select substr('abcde',-3,-4) from dual;
SUBSTR('ABCDE',-3,-4)
---------------------
3.如果n<=0,,結果為0:
QUOTE:
SQL> select substr('abcde',1,-4) from dual;
SUBSTR('ABCDE',1,-4)
--------------------
SQL> select substr('abcde',1,-2) from dual;
SUBSTR('ABCDE',1,-2)
--------------------
SQL> select substr('abcde',1,0) from dual;
SUBSTR('ABCDE',1,0)
-------------------
SQL> select substr('abcde',1,-2) from dual;
SUBSTR('ABCDE',1,-2)
--------------------
4.m,n只要有一個為NULL,那麼結果為NULL
QUOTE:
SQL> select substr('abcde',1,null) from dual;
SUBSTR('ABCDE',1,NULL)
----------------------
SQL> select substr('abcde',null,null) from dual;
SUBSTR('ABCDE',NULL,NULL)
-------------------------
SQL> select substr('abcde',null,1) from dual;
SUBSTR('ABCDE',NULL,1)
----------------------
5.不用n引數時:
n=NULL裡,結果為NULL
n>=0,結果為從n個字元開始擷取到最後
QUOTE:
SQL> select substr('abcde',null) from dual;
SUBSTR('ABCDE',NULL)
--------------------
SQL> select substr('abcde',0) from dual;
SUBSTR('ABCDE',0)
-----------------
abcde
SQL> select substr('abcde',1) from dual;
SUBSTR('ABCDE',1)
-----------------
abcde
SQL> select substr('abcde',2) from dual;
SUBSTR('ABCDE',2)
-----------------
bcde
n<0時,如果|n|<=被擷取字串的長度,
結果為從右向左擷取|n|個字元
QUOTE:
SQL> select substr('abcde',-2) from dual;
SUBSTR('ABCDE',-2)
------------------
de
SQL> select substr('abcde',-3) from dual;
SUBSTR('ABCDE',-3)
------------------
cde
SQL> select substr('abcde',-5) from dual;
SUBSTR('ABCDE',-5)
------------------
abcde
如果|n|>被擷取字串的長度,結果為NULL
QUOTE:
SQL> select substr('abcde',-6) from dual;
SUBSTR('ABCDE',-6)
------------------
SQL> select substr('abcde',-60) from dual;
ORACLE SQL 函式 **INITCAP()**
INITCAP()
假設c1為一字串.函式INITCAP()是將每個單詞的第一個字母大寫,其它字母變為小寫返回.
單詞由空格,控制字元,標點符號等非字母符號限制.
select initcap('hello world') from dual;
結果
INITCAP('HE
-----------
Hello World
select initcap('漢ello world,漢elloworld,hello漢world,hello 漢world') from dual;
結果
INITCAP('漢ELLOWORLD,漢ELLOWORLD,HELLO漢WORLD,HELLO
---------------------------------------------------
漢Ello World,漢Elloworld,Hello漢World,Hello 漢World
SQL **upper()**函式
返回字串str,根據當前字符集對映的所有字元更改為大寫。
SQL> SELECT UPPER('Allah-hus-samad');
+---------------------------------------------------------+
| UPPER('Allah-hus-samad') |
+---------------------------------------------------------+
| ALLAH-HUS-SAMAD |
+---------------------------------------------------------+
1 row in set (0.00 sec)