《oracle pl/sql programming》 第8章 字符串

1.基本概念

oracle提供4種字符串類型:

CHAR,NCHAR,VARCHAR2,NVARCHAR2

前兩者是定長類型,存儲時按原值存儲;后兩者是變長類型,存儲是會自動去除字符串前后的空字符。

CHAR和VARCHAR2是以數據庫字符集編碼(由參數NLS_CHARACTERSET指定)存儲的字符串;NCHAR,NVARCHAR2是以國家字符集編碼(由NLS_NCHAR_CHARACTERSET指定)存儲的字符串。

 

另外 NLS_LENGTH_SEMANTICS參數用來設置字符串長度的物理存儲單位,它有兩個取值:CHAR/BYTE,默認值是BYTE。舉例如:

NLS_LENGTH_SEMANTICS = CHAR

DECLARE

  myString VARCHAR(2);--這里的2表示2個字符

BEGIN

  myString := '中國';--OK

 

NLS_LENGTH_SEMANTICS = CHAR

DECLARE

  myString VARCHAR(2)--這里的2表示2個字節(byte)

BEGIN

  myString := '中國';--錯誤,長度不夠

 

對NULL的認知,舉例:

DECLARE

  myChar char(10) := '';

  myVarchar varchar2(10) := '';

BEGIN

  IF myChar IS NULL THEN

    DBMS_OUTPUT.PUTLINE('myChar is null');

  ELSE

    DBMS_OUTPUT.PUTLINE('myChar is not null');

  END IF;

  IF myVarchar IS NULL THEN

    DBMS_OUTPUT.PUTLINE('myVarchar is null');

  ELSE

    DBMS_OUTPUT.PUTLINE('myVarchar is not null');

  END IF;

 

...

輸出結果:

  myChar is not null

  myVarChar is null

 

 

2.常用情況

字符串的字面表示

兩種方式,舉例:

原始串:i'm a programmer.

一種方式是,頭尾單引號,由兩個單引號字面代表一個單引號: 'i''m a programmer.'

另一種方式是,q'表示法:q'{i'm a programmer} 或 q'!i'm a programmer.!

q'表示其后的字符是一個字符串分隔符,上例中,{,!是字符串分隔符。注意,如果分隔符的起始是[, {, <, (, 那相應的結束符就必須是], }, >, )

q'只作用于char,varchar2,對應NCHAR,NVARCHAR2的是n',對應unicode的是u'

 

使用不可見字符

    SELECT name || chr(10)

           || address1 || chr(10)

           || address2 || chr(10)

           || address3 || chr(10)

           || address4 || chr(10)

           || city || ', ' || state || ' ' || zipcode

           AS company_address

    FROM company;

本例中chr(10)代表換行符。

 

連接字符串的兩種方式

    CONCAT ('abc', 'defg') --> 'abcdefg'

    CONCAT (NULL, 'def') --> 'def'

    CONCAT ('ab', NULL) --> 'ab'

    CONCAT (NULL, NULL) --> NULL

 

    DECLARE

       x VARCHAR2(100);

    BEGIN

       x := 'abc' || 'def' || 'ghi';

       DBMS_OUTPUT.PUT_LINE(x);

    END;

 

大小寫轉換函數

LOWER(string)

UPPER(string)

 

NLS_COMP,NLS_SORT

NLS_COMP影響字符串的比較和排序的規則

Syntax NLS_COMP = {BINARY | ANSI}

Default value BINARY

 

Syntax NLS_SORT = {BINARY | linguistic_definition}

Default value Derived from NLS_LANGUAGE

注意:將NLS_SORT設置為非BINARY時,查詢數據庫時將導致全表掃描。

 

將字符串中的單詞的首字母變為大寫

    DECLARE

       name VARCHAR2(30) := 'MATT williams';

    BEGIN

       DBMS_OUTPUT.PUT_LINE(INITCAP(name));

    END;

輸出結果:

   Matt Williams

 

    DECLARE

       name VARCHAR2(30) := 'JOE mcwilliams';

    BEGIN

       DBMS_OUTPUT.PUT_LINE(INITCAP(name));

    END;

輸出結果:

   Joe Mcwilliams

 

3.字符串函数快速参考

ASCII(single_char) RETURN NUMBER;

返回单个字符的ASCII码值;

 

ASCIISTR(string1) RETURN STRING;

返回字符串中的ASCII字符。

 

CHR(integer)

返回参数指定的ASCII值的字符,是ASCII函數的反向

還有一種用法是 CHR(integer USING NCHAR_CS),以返回國家字符集的字符

 

COMPOSE(string1)

ã = 'a/0303'

COMPOSE('a/0303') 返回ã的unicode的十六進制值

 

CONCAT(string1, string2)

連接兩個字符串,相當與||

 

CONVERT(string1, target_char_set)

將string1轉換成字符集target_char_set格式

也可以指定來源字符集:CONVERT(string1, target_char_set,source_char_set)

 

DECOMPOSE(string1)

與COMPOSE相反

 

GREATEST(string1, string2, ...)

返回一組字符串中最大的那個

 

INITCAP(string1)

將英文句子中的單詞首字母大寫

 

INSTR(string1, string2)

返回string2在string1中的起始位置,相當于delphi中的pos函數

 

LEAST(string1, string2, ...)

返回一組字符串中最小的字符串,與GREATEST相反

 

LENGTH(string1)

返回字符串長度

注意 LENGTH('') IS NULL

 

LOWER(string1)

字符串轉換為小寫

UPPER函數與其相對

 

LPAD(string1, padded_length)

在string1左邊添加padded_length個空格

LPAD(string1, padded_length,pad_string)

在string1左邊添加padded_length個pad_string

RPAD與其相對

 

LTRIM(string1)

消除string1左邊的空字符

與LTRIM函數相對

 

NCHR(code_location)

類似與CHR函數,只不過返回的是國際字符集的對應碼值

 

NLS_INITCAP(string1)

與INITCAP類似,字符集不同

 

NLS_LOWER

與LOWER類似,字符集不同

 

NLS_UPPER

與UPPER類似,字符集不同

 

REGEXP_INSTR, REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR

正則表達式函數,后面專門介紹

 

REPLACE(string1, match_string, replace_string)

查找string1中與match_string匹配的子字符,并替換為replace_string

 

SOUNDEX(string1)

返回string1的語言表達的代號,如:

    SOUNDEX ('smith') --> 'S530'

    SOUNDEX ('SMYTHE') --> ''S530'

    SOUNDEX ('smith smith') --> 'S532'

    SOUNDEX ('smith z') --> 'S532'

    SOUNDEX ('feuerstein') --> 'F623'

    SOUNDEX ('feuerst') --> 'F623'

 

SUBSTR(string1, start, length)

截取string1從位置start開始,長度為length的部分

 

TO_CHAR(national_character_data)

將國家字符集的數據轉換為數據庫字符集格式

 

TO_MULTI_BYTE(string1)

將單字節字符串轉換為多字節字符串unicode

 

TO_NCHAR(database_character_data)

將數據庫字符集的數據轉換為國家字符集格式

 

TO_SINGLE_BYTE(string1)

將多字節字符串轉換為單字節字符串

 

TRANSLATE (string1, search_set, replace_set)

類似與REPLACE函數,但又不同,舉例:

TRANSLATE('ABCDCE','ABC','XXX') = 'XXXDXE' --單個字符匹配

REPLACE('ABCDCE','ABC','XXX')= 'XXXDCE' --整個串匹配

 

TRIM (FROM string1)

去掉字符串頭尾的指定字符

 

UNISTR(string1)

將string1轉換為UNICODE

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(oracle,String,null,Integer,character,byte)