1. 程式人生 > >sql常用函式instr()和substr()

sql常用函式instr()和substr()

在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)