Oracle學習筆記之字元型及處理方法

來源:互聯網
上載者:User

與其他程式設計語言一樣,Oracle中同樣存在著資料類型。Oracle中的資料類型主要有兩個應用情境:一是用於指定資料表中列的類型;二是用於PL/SQL編程中聲明變數。Oracle的資料類型主要包括:字元型(character)、數值型(number)、日期型(date)和大對象型(LOB)。同時,Oracle提供了針對資料類型的內建函數。本章著重講述Oracle中的字元型及其相關的函數。

1 字元型簡介

 Oracle中的字元型有三種,分別是char(n)、varchar(n)、varchar2(n)。

 1.1  固定長度字串——char(n)

char(n)指定變數或列的資料類型為固定長度的字串。其中,n代表字串的長度。當實際字串的長度不足n時,Oracle利用空格在右端補齊。當然,Oracle不允許實際字串的長度大於n。

資料庫中列指定為char(n)類型時,n的最大值不能大於2000。否則,Oracle將拋出錯誤

當char(n)作為列的資料類型時,測試其最大長度。

SQL> create table test_char(f_char char(2001));

 1.2 varchar(n)

Oracle中提供了varchar(n)的資料類型。該類型是Oracle迎合工業標準中的varchar而制定的。該數

據類型實際是一個可變長度字串類型。也就是說,當實際字串的長度不足時,不會使用空格進行填充。同樣,實際字串的長度也不允許超出n。

當作為列的資料類型出現時,varchar的最大長度不能大於4000,如下所示。

SQL> alter table test_char add f_varchar varchar(4001);

 1.3 varchar2(n)

與varchar(n)類型,varchar2(n)同樣是可變長度的字串類型。Oracle在工業標準之外,自訂了該資料類型。同時Oracle也提醒使用者,盡量使用varchar2(n),而非varchar(n)。因為使用varchar2(n)可以獲得Oracle向後相容性的保證。

當作為列的資料類型出現時,varchar2的長度同樣不能大於4000,如下所示。

SQL> alter table test_char add f_varchar2 varchar2(4001);

2 字元型分析

對於一般用途的資料表來說,最常用的字串類型為varchar2(n)。

2.1  varchar2(n)與char(n)的區別

varchar2(n)為可變字串類型,而char(n)為固定字串類型。這二者的區別在於是否使用空格來補齊不足的部分。

在表test_char中,列f_char和f_varchar2的長度分別為2000和4000。先向其中插入新的記錄,並為兩列賦予相同的值。

SQL> insert into test_char(f_char, f_varchar2)

  2  values('000', '000');

2.2  varchar2(n)與char(n)的選擇

char(n)類型的列通常佔用較大的儲存空間;而varchar2(n)類型的列佔用的空間較小。所以,varchar2(n)類型是我們在進行資料庫設計時的一般選擇。但這並不意味著char(n)類型應該被摒棄。相反,char(n)在效率方面要高於varchar2(n)。這是因為可變長度的字串類型在實際資料長度發生改變時,總需要不斷調整儲存空間。尤其是頻繁修改資料,而資料長度也不斷改變的情況下,這種效率的損耗尤其明顯。

大多數的應用程式,並不將資料庫端的效率作為首要考慮的需求。而更傾向於較小的空間代價,因此大多使用varchar2(n)來定義列。而char(n)則是典型的“以空間換時間”,讀者可以在實際開發中酌情選擇。

2.3  變數聲明中的字串類型

三種字串類型——char(n)、varchar(n)、varchar2(n),都可用於聲明變數。但是,利用三者聲明時,最大長度均為32767。

測試char(n)、varchar(n)及varchar2(n)用於變數聲明時的最大長度。

SQL> declare s char(32768);

3 字元型處理

3.1向左補全字串——lpad ()函數

lpad()函數用於向左補全字串。該函數主要用於字串的格式化。格式化的方式為,將字串格式化為指定長度,如有不足部分,則在字串的左端填充特定字元。其調用方式如下所示。

lpad(string, padded_length, [pad_string])

其中,第一個參數指定原始字串;第二個參數指定格式化之後的字串長度;第三個參數指定使用哪個字元來填充不足位元。

3.2  向右補全字串——rpad ()函數

與lpad()函數相似,rpad()函數返回字串格式化為特定位元的操作。只是該函數自右端補全不足位元。

利用rpad()函數實現右端補全字串。

SQL> select rpad('1', 4, '*') empplyee_no from dual;

3.3  返回字串的小寫形式——lower()函數

lower()函數用於返回字串的小寫形式。該函數僅有一個參數,即原始字串。

在資料庫中,當查詢條件可以忽略大小寫形式時,我們通常利用lower()函數進行字串大小寫形式的統一。

SQL> select username, password

    from dba_users

    where lower(username) = 'system';

3.4  返回字串的大寫形式——upper()函數

lower()函數相反,upper()函數用於返回字串的大寫形式。該函數僅有一個參數,即原始字串。

我們同樣可以upper()函數來改寫的查詢語句。

SQL> select username, password

   from dba_users

   where upper(username) = 'SYSTEM';

3.5  單詞首字元大寫——initcap()函數

initcap()函數用於將單詞轉換為首字元大寫、其它字元小寫形式。

 利用initcap()函數格式化單詞。

SQL> select initcap('like') new_word from dual;

 SQL> select initcap('LIKE') new_word from dual;

 

3.6  返回字串長度——length()函數

length()函數可用於返回字串長度。

利用length()函數返回字元長度。

SQL> select length('12345') len from dual;

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.