1. 程式人生 > 資料庫 >oracle中length、lengthb、substr、substrb函式用法介紹

oracle中length、lengthb、substr、substrb函式用法介紹

我記得我曾經在開發form的時候犯過這樣一個錯誤,對於form中的某個欄位,對應於資料庫中某張表的欄位,假設在資料庫中這個欄位一般也就用到20個漢字的長度,後來我在開發form的時候,設定item型別長度的時候,我慣性的設定成了50byte,想著就算是20個漢字,最多也就佔40個byte長度嘛。可是,就因為這一個想當然,結果出現錯誤了,後來發現數據庫字符集編碼是utf8,那麼應該設定為60。從那以後,每次涉及到給欄位設定長度的時候,我都會特別注意下,到底是啥編碼。

在oracle中,比較常見的可能是length、substr,至少我看到的大部分都是這兩個,要不是昨天看程式碼發現了lengthb、substrb,估計我也遺忘了。length表示的是字串的字元長度,lengthb表示的是字串的位元組長度;substr表示根據字元長度獲取子串,substrb表示根據位元組長度來獲取字串。下面直接看例子來說明:

SELECT length('葉德華abc') -- length按字元計,漢字、英文、數字都是1個字元,故這裡返回6 
 FROM dual; 
SELECT lengthb('葉德華abc') -- length按位元組計,我這裡是UTF-8編碼,漢字3個位元組,英文一個位元組,故這裡返回12 
 FROM dual; 
SELECT substr('葉德華abc',-- substr按字元擷取,擷取到a,返回:葉德華a 
       1,4) 
 FROM dual; 
SELECT substrb('葉德華abc',1,2) -- substrb按位元組擷取,2不足一個漢字長度,返回:兩個空格 
 FROM dual; 
SELECT substrb('葉德華abc',3) -- substrb按位元組擷取,3剛好是一個漢字長度,返回:葉 
 FROM dual; 
SELECT substrb('葉德華abc',4) -- substrb按位元組擷取,4多餘一個漢字少於兩個漢字,返回:葉 加一個空格 
 FROM dual; 

在oracle中應該還有其他類似的方法,這裡就不總結了,大概就是這麼個意思。補充一下,據說在oracle中定義字元型別的時候預設的長度是byte,比如varchar2(20)表示的是20個位元組長度,如果要定義成字元,則varchar2(20 char),不過,一般我們也都用位元組定義。

總結

以上就是本文關於oracle中length、lengthb、substr、substrb函式用法介紹的全部內容,希望對大家有所幫助。感興趣的朋友可以參閱:oracle求字串長度函式length()和hengthb()簡介、 Oracle RMAN自動備份控制檔案方法介紹、 oracle 資料庫啟動階段分析等。感謝大家對本站的支援。