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;