《零点起飞学Oracle之处理字符型数据》由会员分享,可在线阅读,更多相关《零点起飞学Oracle之处理字符型数据(24页珍藏版)》请在金锄头文库上搜索。
1、第第5 5章章 处理字符型数据处理字符型数据Oracle中的数据类型大概有23种,可以简单的分为 数字型(number)、字符型(character)、日期型 (date)和其他类型4中。在SQL中,经常会使用 到针对数据类型的内置函数。本章着重讲述Oracle 中的字符型及其相关的函数。本章主要从字符型 定义和字符型函数方面进行讲解。5.1 5.1 字符型简介字符型简介字符类型,即字母、数据、标点符号、数字和空 格的混合形式。字符型是用来存放字符和字符串 的,在Oracle中的字符型有varchar2(n)、 nvarchar2(n)、char(n)、nchar2(n)、long等类型。5.
2、1.1 5.1.1 构建固定长度字符串类型构建固定长度字符串类型char(n)指定变量或列的数据类型为固定长度的字 符串。其中,n代表字符串的长度。如果设置了长 度小于char(n)列的值,则Oracle会自动用空格填 充。当然,Oracle不允许实际字符串的长度大于n 。数据库中列指定为char(n)类型时,n的最大值不能 大于2000。否则,Oracle将抛出错误。【示例5-1】当char(n)作为列的数据类型时,测试 其最大长度。5.1.2 5.1.2 构建可变长度字符串类型构建可变长度字符串类型Oracle中提供了varchar(n)的数据类型。varchar(n) 用于存储可变长度的
3、字符串。该类型是Oracle迎合 工业标准中的varchar而制定的。当实际字符串的 长度不足时,不会使用空格进行填充。同样,实 际字符串的长度也不允许超出n。【示例5-2】当作为列的数据类型出现时,varchar 的最大长度不能大于4000。5.1.35.1.3 构建可变长度字符串新类型构建可变长度字符串新类型与varchar(n)类型,varchar2(n)同样是可变长度的字 符串类型。Oracle在工业标准之外,自定义了该数 据类型。在今后的Oracle版本中也许会有变化。所 以提醒用户,尽量使用varchar2(n),而非varchar(n) 。因为使用varchar2(n)可以获得O
4、racle向后兼容性 的保证。【示例5-3】当作为列的数据类型出现时,varchar2 的长度同样不能大于4000。5.2 5.2 对比三种字符串数据类型对比三种字符串数据类型CHAR数据类型是一种有固定长度和最大长度的字 符串,varchar2数据类型是一种可变长度的、有最 大长度的字母数字型数据。对于一般用途的数据 表来说,最常用的字符串类型为varchar2(n)。本节 将着重分析char(n)与varchar2(n)的区别。5.2.1 varchar2(n)5.2.1 varchar2(n) VS char(n)VS char(n)varchar2(n)为可变字符串类型,而char(n
5、)为固定字 符串类型。这二者的区别在于是否使用空格来补 齐不足的部分。【示例5-4】在表test_字符中,列name和DEPT的 长度分别为2000和4000。先向其中插入新的记录 ,并为两列赋予相同的值。5.2.25.2.2 varchar2(n)varchar2(n) VS char(n)VS char(n)通过示例5-4可以看出,char(n)类型的列通常占用 较大的存储空间;而varchar2(n)类型的列占用的空 间较小。所以,varchar2(n)类型是我们在进行数据 库设计时的一般选择。但这并不意味着char(n)类 型应该被摒弃。相反,char(n)在效率方面要高于 varch
6、ar2(n)。这是因为可变长度的字符串类型在实 际数据长度发生改变时,总需要不断调整存储空 间。尤其是频繁修改数据,而数据长度也不断改 变的情况下,这种效率的损耗尤其明显。5.2.3 5.2.3 构建变量中的字符串类型构建变量中的字符串类型Character数据类型用来存储字母数字型数据。当 在Oracle中定义一个字符数据时,通常需要指定字 段的长度,它是该字段的最大长度。常用的三种 字符串类型char(n)、varchar(n)、varchar2(n), 都可用于声明变量。但是,利用三者声明时,最 大长度均为32767。【示例5-5】测试char(n)、varchar(n)及varchar
7、2(n) 用于变量声明时的最大长度。5.3 5.3 常见字符串操作常见字符串操作Oracle提供了丰富的字符串函数来处理字符型数 据。字符串函数也称为字符函数,可以分为两类 ,返回值为字符的函数和返回值为数字的函数。 本节将着重介绍这些函数。5.3.15.3.1 向左补全字符串向左补全字符串字符串函数中有些函数是用来进行剪切和粘贴的。lpad和 rpad可以在串的左边或右边连接空格或其他字符。lpad和 rpad是十分相似的函数。lpad()函数用于向左补全字符串。 该函数主要用于字符串的格式化。格式化的方式为,将字 符串格式化为指定长度,如有不足部分,则在字符串的左 端填充特定字符。其调用方
8、式如下所示。 lpad(string, padded_length, pad_string) 其中,第一个参数指定原始字符串;第二个参数指定格式 化之后的字符串长度;第三个参数指定使用哪个字符来填 充不足位数。 【示例5-6】employeenew表中员工工号原来是3位,现在希 望被格式化为5位数字,不足部分使用“0”进行填充。例如 工号1,应被格式化为“00001”,那么此时可以利用lpad()函 数。5.3.2 5.3.2 向右补全字符串向右补全字符串与lpad()函数相似,rpad()函数返回字符串格式化为特 定位数的操作,允许在列的右边填充一组字符。填充的 字符可以是任意字符,空格、句
9、号、逗号、字母或数 字,甚至是感叹号。只是该函数自右端补全不足位 数。【示例5-7】利用rpad()函数实现右端补全字符串。5.3.3 5.3.3 字符串转化为小写形式字符串转化为小写形式lower()函数用于返回字符串的小写形式。该函数仅有 一个参数,即原始字符串。【示例5-8】在数据库中,当查询条件可以忽略大小写 形式时,我们通常利用lower()函数进行字符串大小写 形式的统一。5.3.4 5.3.4 字符串转化为大写形式字符串转化为大写形式与lower()函数相反,upper()函数用于返回字符串 的大写形式。该函数仅有一个参数,即原始字符 串。【示例5-9】我们同样可以upper()
10、函数来改写示例5 -8的查询语句。5.3.5 5.3.5 单词首字符大写单词首字符大写initcap()函数用于将单词转换为首字符大写、其它 字符小写的形式。【示例5-10】利用initcap()函数格式化单词。5.3.6 5.3.6 获取字符串长度获取字符串长度length()函数可用于返回字符串长度,如果字符串 为null,那么将返回null值。【示例5-11】利用length()函数返回字符长度,查 询job_history表中job_id的长度。【示例5-12】查看参数为空值时,函数的返回值。5.3.7 5.3.7 截取字符串截取字符串使用substr()函数可以对提供的参数进行截取。
11、该 函数的一般调用形式如下所示。substr(string, start_index, length)其中,第一个参数string指定原始字符串;第二个 参数start_index指定开始截取的位置;第三个参数 指定截取的长度。需要注意的是,Oracle中字符串 中第一个字符的位置为1。这与很多编程语言,如 Java中自0开始的习惯不同。【示例5-12】利用substr()函数截取字符串。5.3.8 5.3.8 查询子字符串查询子字符串利用instr()函数可以在一个字符串中检索另一个给定字 符出现的位置,也可以作为判定原来字符串是否包含 指定字符串的标准,返回结果是一个整数。如果子字 符串未
12、出现在父字符串中,该函数将返回0。其调用形 式如下所示。instr(string, sub_string, start_index , times)其中,string为父字符串;sub_string为子字符串; start_index为可选参数,指定进行搜寻的起始位置; times为可选参数,表示第几次获得子字符串。【示例5-13】利用instr()函数获得子字符串的出现位 置。5.3.9 5.3.9 删除左侧空格删除左侧空格ltrim、rtrim类似修剪机。它们从串的左边或者右 边删除不需要的字符。ltrim()函数用于删除字符串 的左侧空格。【示例5-14】利用ltrim()函数删除字符串
13、的左侧空 格。5.3.10 5.3.10 删除右侧空格删除右侧空格rtrim()函数用于删除字符串的右侧空格。【示例5-15】利用rtrim()函数删除字符串右侧空 格。5.3.11 5.3.11 删除两侧空格删除两侧空格trim()函数可以删除字符串两侧的空格。它实际是 ltrim()函数与rtrim()的综合操作结果。【示例5-16】利用trim()函数删除字符串两侧空 格。5.3.12 5.3.12 连接字符串连接字符串concat()函数可以将两个字符串进行连接,它的效 果和操作符“|”返回的效果是相同的。【示例5-17】利用concat()函数连接字符串。5.3.13 5.3.13 翻译字符串翻译字符串translate()函数的执行过程非常类似于翻译的过 程。【示例5-18】利用translate()函数翻译字符串。5.45.4 本章小结本章小结如果信息为字符类型,则需要使用字符串函数对 它进行修改。本章着重讲述了Oracle中常用的字符 型及与之相关的内置函数。对于字符型函数,如 果字符型函数将null作为参数时,往往返回值为 null;即使字符型函数所处理的是一个变量,在内 部处理时,都是针对参数的一个副本,而不会真 正改变变量的值。