《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

 

 

 

 

 

 

 

 

 

 

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

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

Oracle数据中的PL/SQL介绍

什么是Pl/SQL: PL/SQL是Procedure Language & Sturtured Query Language的缩写。PL/SQL的优点: 有利于客户/服务器环境应用的性能提高。...
  • qq455276333
  • qq455276333
  • 2013年10月01日 11:58
  • 1617

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

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

Oracle PL/SQL常用47个工具包

Oracle PL/SQL Utility Library PL/SQL 各种常用工具包代码,包含: PDF文件生成工具包 Excel文件生成、 RTF文件生成、 Zip文件压缩与解压、 ...
  • nansheng_su
  • nansheng_su
  • 2015年05月11日 20:53
  • 1159

PL/SQL客户端连接ORACLE服务端配置详细过程

PL/SQL客户端连接ORACLE服务端配置详细过程
  • AaronSiHai
  • AaronSiHai
  • 2017年03月14日 09:46
  • 1736

Oracle 11g 安装教程及pl/sql下载安装

一般来说,下载后都会有两个压缩包,将这两个压缩包解压到同一个文件夹下,本例中解压目录为“database” 进入目录后看到setup.EXE,双击运行 稍等片刻后会出现如下安装界面:可根据当前...
  • u010750497
  • u010750497
  • 2017年01月03日 17:36
  • 3185

oracle客户端PL/SQL安装简易教程

前言:oracle客户端有很多,市面上最常用的是PL/SQL,另外还有navicat for oracle,toad for oracle,以上两个都收费,还有一个为oracle官方推出的免费orac...
  • fengbird
  • fengbird
  • 2017年01月06日 23:25
  • 1994

pl/sql developer 无法连接本地Oracle(注意是本地oracle)

本来挺简单的事情,会由于客观环境的原因让问题变得很复杂和无法理解 如果本地的oracle无法用pl/sql developer  连接上,大多是因为本地oracle混乱,各种客户端,各种服务...
  • rainyspring4540
  • rainyspring4540
  • 2017年02月10日 16:19
  • 685

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

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

PL/SQL Developer 连接Oracle数据库详细配置方法

 PL/SQL Developer 连接Oracle数据库详细配置方法   近段时间很多网友提出监听配置相关问题,客户终端(Client)无法连接服务器端(Server)。本文现...
  • Iamagril
  • Iamagril
  • 2015年06月15日 09:24
  • 1910
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《oracle pl/sql programming》 第8章 字符串
举报原因:
原因补充:

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