1. 程式人生 > >Oracle中有關字串操作的語法

Oracle中有關字串操作的語法

Oracle中有關字串操作的語法

 

Oracle提供了豐富的字串函式

    

lpad()函式

lpad()函式用於左補全字串。在某些情況下,預期的字串為固定長度,而且格式統一,此時可以考慮使用lpad()函式。例如,深市股票程式碼都以0開頭,並且都為6位,可以利用lpad格式化股票程式碼,以保證股票程式碼的格式。

select lpad('21',6,'0') stock_code from dual;

需要注意的是,當原字串的長度大於預期長度時,實際進行的是擷取字串操作。

select lpad('1234567',6,'0') stock_code from dual;

 

rpad()函式

與lpad()函式相反,rpad()函式從右端補齊字串。

select rpad('abc', 10, '*') from dual;

注意與說明:lpad()和rpad()都用於填充字串,lpad()從左端進行填充,而rpad()從右端進行填充,但是,二者在最終擷取字串時,都是從左端開始擷取。

select rpad('abcdefg', 6, '*') from dual;

 

lower()函式——返回小寫字串

lower()函式用於返回字串的小寫形式。lower()函式在查詢語句中經常扮演重要角色。例如,對於使用者名稱和密碼的校驗來說,使用者名稱一般並不區分大小寫,使用者無論輸入了大寫還是小寫形式,都被認為是合法使用者。因此,在資料庫查詢時,應該將資料庫中使用者名稱與使用者輸入的使用者名稱進行統一。

select user_id, user_name from t_users where lower(user_name) = lower('Alex');

 

upper()函式——返回大寫字串

upper()函式用於返回字串的大寫形式。與lower()函式類似,upper()函式也可以用在查詢語句中,以統一資料庫和查詢條件的一致性。

select user_id, user_name from t_users where upper(user_name) = upper('ALEX');

注意與說明:upper()函式和lower()函式只針對英文字元其作用,因為只有英文字元才有大小寫之分。

 

initcap ()函式——單詞首字母大寫

nitcap()函式將單詞的首字母大寫。

select initcap('big') from dual;

需要注意的是,initcap()函式不能自動識別單詞

select initcap('bigbigtiger') from dual;

initcap()函式會將引數中的非單詞字元作為單詞分隔符

select initcap('big_big_tiger') from dual;

select initcap('big/big/tiger') from dual;

select initcap('big big tiger') from dual;

 

 

length()函式用於返回字串的長度。

select length('abcd ') from dual;

空字串的長度不是0,而是null。因為空字串被視作null,所以,length(null)返回的仍然是null。

select length('') from dual;

對其其他資料型別,照樣可以通過length()函式來獲得其長度。length()函式會首先將引數轉換為字串,然後計算其長度。

select length(12.51) from dual;

 

 

substr()函式——擷取字串

substr()函式用於擷取字串。該函式可以指定擷取的起始位置,擷取長度,可以實現靈活的擷取操作,因此,成為字串操作中最常用的函式之一。

例如,對於字串"1234567890",現欲擷取自第5位開始的4個字元。

select substr('1234567890', 5, 4) from dual;

需要注意的是,Oracle中字元位置從1開始,而不是像某些程式語言(如Java)那樣從0開始。

如果不指定長度,那麼substr()函式將獲取起始位置引數至字串結尾處的所有字元。

select substr('1234567890', 5) from dual;

 

instr()函式用於獲得子字串在父字串中出現的位置。

select instr('big big tiger', 'big') from dual;

可以指定額外的引數,以命令該函式從指定位置開始搜尋。

select instr('big big tiger', 'big', 2) from dual;

還可以指定出現次數引數,以指定是第幾次搜尋到子字串。

select instr('big big tiger', 'big', 2, 2) from dual;

 

 

ltrim()函式——刪除字串首部空格

ltrim()中的l代表left。該函式用於刪除字串左端的空白符。

select ltrim(' abc') from dual;

需要注意的是,空白符不僅僅包括了空格符,還包括TAB鍵、回車符和換行符。

 

rtrim()函式——刪除字串尾部空格

rtrim()中的r代表right。該函式用於刪除字串右端空白符。刪除字串首尾空白符可以結合使用ltrm()和rtrim()函式。

select rtrim(ltrim(' abc ')) from dual;

 

trim()函式——刪除字串首尾空格

trim()函式可用於刪除首尾空格,相當於ltrim()和rtrim()的組合。

select trim(' abc ') from dual;

 

 

 

to_char()函式——將其他型別轉換為字元型別

to_char()函式用於將其他資料型別的資料轉換為字元型,這些型別主要包括數值型、日期型。

1. 將數值型轉換為字串

select to_char(120, '99999') result from dual;

select to_char(0.96, '9.99') result from dual;

select to_char(0.96, '0.00') result from dual;

select to_char(5897.098, '999,999,999.000') result from dual;

select to_char(5987.098, '$999,999,999.000') result from dual;

2. 將日期型轉換為字串

select to_char(sysdate, 'yyyy-mm-dd') result from dual;

select to_char(sysdate, 'YYYY-MON-DD') from dual;

 

chr()函式——將ascii碼轉換為字串

chr()函式用於將ascii碼轉換為字串。通過chr()函式,可以對不宜直接輸入的字元進行操作。例如,將回車換行符插入到資料中。

insert into test_data values (6, '周林'||chr(13)||chr(10)|'樑軍', 20);

select * from test_data where id = 6;

 

 

 

translate()函式——替換字元

translate()函式用於替換字串。替換的規則類似於翻譯的過程。

select translate('56338', '1234567890', 'avlihemoqr') result from dual;

需要注意的是,當字元不能被成功"翻譯",那麼,Oracle將使用空字元替換它。利用此特性,可以使用translate()函式來刪除一個含有數字和英文字母的字串中的所有字母:

select translate('21343yuioioizf899dasiwpe58595oda0j098', '#abcdefghijklmnopqrstuvwxyz',' ') reulst

from dual;