您的位置:首页 > 数据库 > Oracle

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

2007-10-12 00:21 344 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: