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

原创 2007年10月12日 00:21:00

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 11g PL/SQL Programming学习十七

---------------------------------------------------------------------------- -----------------PL/SQ...
  • edcvf3
  • edcvf3
  • 2013年06月21日 00:32
  • 3180

oracle 11g PL/SQL Programming学习十六

---------------------------------------------------------------------------- -----------------PL/SQ...
  • edcvf3
  • edcvf3
  • 2013年06月19日 00:39
  • 2515

oracle pl/sql宝典(第2版)

《oracle pl/sql宝典(第2版)》共分4 篇。     第1篇 介绍oracle 和pl/sql 基础知识;     第2篇 介绍数据表的创建和操作、表中数据的操作、数据的基本查询、查询...
  • u012213585
  • u012213585
  • 2013年12月05日 16:25
  • 653

1、Oracle PL/SQL中的字符串及函数介绍

该文章是 PL/SQL基础(3):小专题 系列文章之一。 Oracle中常用的字符串类型有:固定长度(CHAR等)、可变长度(VARCHAR2等)和大对象(CLOB)三类。CHAR为固定的长度字符...
  • dou3516
  • dou3516
  • 2016年09月07日 12:14
  • 3051

解决问题:Oracle/PLSQL: ORA-06550

Home >Oracle/PLSQL >Oracle Error Messages Oracle/PLSQL: ORA-06550 Learn the cause and how to r...
  • haiross
  • haiross
  • 2014年03月06日 10:39
  • 17704

2、Oracle PL/SQL字符串分割截取

该文章是 PL/SQL基础(3):小专题 系列文章之一。 Oracle中的instr和substr函数 Oracle PL/SQL中可以通过instr(获取特定字符串的索引)和substr(截...
  • dou3516
  • dou3516
  • 2016年09月07日 12:19
  • 4617

pl/sql 执行带&符号的语句,提示要输入的解决办法

Oracle的SQL语句中如何处理‘&’符号   在Oracle中,如果在sql中出现'&'符号,会被自动转义;   而被要求输入在&符号后跟随的字符串的值,例如:   update ...
  • hamov
  • hamov
  • 2016年09月08日 11:33
  • 1293

Oracle PL/SQL编程详解之三: PL/SQL流程控制语句

[推荐]Oracle PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆)  本篇主要内容如下: 3.1  条件语句 3.2  CASE 表达式 ...
  • zhglance
  • zhglance
  • 2017年04月03日 21:00
  • 571

PL/SQL 集合 -- 关联数组

-- Start 关联数组(Associative Array)其实就是一个 MAP,键的类型可以是 VARCHAR2, VARCHAR, STRING, LONG 或 PLS_INTEGER。 D...
  • shangboerds
  • shangboerds
  • 2015年01月03日 17:51
  • 1204

免安装Oracle运行pl/sql developer

 Sql客户端中,虽然最便捷的是万能而且轻量无比的Sql Workbench,唯一的遗憾是只支持JDK5,不过这个小小的遗憾只要配置配置就能避免。     Otherwise,Oracle来说,用起来...
  • devoteinjava
  • devoteinjava
  • 2007年04月18日 10:27
  • 2197
收藏助手
不良信息举报
您举报文章:《oracle pl/sql programming》 第8章 字符串
举报原因:
原因补充:

(最多只允许输入30个字)