4.3 单行字符型函数
常用的单行字符型函数包括:
█ LOWER
█ UPPER
█ INITCAP
█ CONCAT
█ SUBSTR
█ LENGTH
█ INSTR
█ TRIN
█ REPLAC
下面,我们通过例子来分别介绍他们。
LOWER(列名|表达式):该函数是把字符转换成新小写。
可以通过例4-1的查询语句来验证这一单行字符型函数。
例 4-1
SQL> SELECT LOWER('SQL:Structural Query Language')
2 FROM dual;
例 4-1 结果
这里的dual使系统的一个虚表(伪表)。那么Oracle为什么要引入这个虚表呢?
在我们第一张中介绍过,在查询语句中必须包含连个字句。还记得是哪两个子句吗?在查询语句中必须包含SELECT和FROM两个字句。
可是LOWER('SQL:Structural Query Language')不属于任何表,我们如何在不违反SQL的语法前提下显示它呢?Oracle提供的虚表dual,就是用来解决这一难题的。
UPPER(列名|表达式):该函数把字符转换成大写。
可以通过例 4-2的查询语句来验证这一单行字符型函数。
例 4-2
SQL> SELECT UPPER('sql is used exclusively in rdbmses')
2 FROM dual;
例 4-2 结果
INITCAP(列名|表达式):该函数是吧每个字的头一个字符转换成大写,求的转换成小写。
可以通过如例 4-3的查询语句来验证这一单行字符型函数。
例 4-3
SQL> SELECT INITCAP('SQL is en ENGLISH LIKE language')
2 FROM dual;
例 4-3 结果
CONCAT(列名|表达式,列名|表达式):该函数是把同一个字符串和第二个字符串连接成一个字符串。
可以通过例4-4的查询语句来验证这一单行字符型函数。
例 4-4
SQL> SELECT CONCAT('SQL allows you to manipulate the data in DB',
2 'without any programming knowledge')
3 FROM dual;
例 4-4 结果
SUBSTR(列名|表达式):该函数是返回指定的子串。该子串是从第m个字符开始,其长度为n。
可以通过例 4-5的查询语句来验证这一单行字符型函数。
例 4-5
SQL> SELECT SUBSTR('SQL Lets you concentrate on what has to be done',14)
2 FROM dual;
例 4-5 结果
在这个例子中,我们省略了n,其结果是返回从第14个字符开始一直到结尾的所有字符。
LENGTH(列名|表达式):该函数是返回列中或表达式中字符串的长度。
可以通过 例 4-6 的查询语句来验证这一单行字符串函数。
例 4-6
SQL> SELECT LENGTH('SQL does not let you concentrate on how it will be achieved')
2 FROM dual;
例 4-6 结果
INSTR(列名|表达式,‘字符串’,[m],[n]):该函数是返回所给字符串的数字位置,表示从第m个字符开始搜索,n表示所给字符串出现的次数,他们的默认值都是1.
您可以通过例 4-7的查询语句来验证这一单行字符型函数。
例 4-7
SQL> SELECT INSTR('SQL allows for dynamic DB changes','F')
2 FROM dual;
例 4-7 结果
上面例子说明所给的字符串是鱼大小写有关的。因此,我们只要把例4-7中的‘F’改成‘f’就可以得到例4-8所需的结果。
例 4-8
SQL> SELECT INSTR('SQL allows for dynamic DB changes','f')
2 FROM dual;
例 4-8 结果
如果读者有时间的话,请仔细阅读例4-1到例4-8中的字符串。他们实际上是一个有关SQL的说明。
为了帮助读者理解,在这里给出如下的中文译文:
█ 例 4-1: SQL结构化的查询语言
█ 例 4-2: SQL仅适用于关系型数据库管理系统
█ 例 4-3: SQL是一种与英语相似的语言
█ 例 4-4: SQL允许您在不具备任何程序设计知识的情况下操纵数据库中的数据
█ 例 4-5: SQL让您把精力集中在必须要做的事情上
█ 例 4-6: SQL不让您把经历集中在您如何去做这件事上
█ 例 4-7: SQL允许动态的改变数据库
█ 例 4-8: SQL允许动态的改变数据库
当您仔细阅读完以上有关SQL的说明之后,相信您对SQL的理解一定会更加深刻,也许会达到一个新的层次。
TRIM([leading|trailing|borh]要去掉的字符FROM源字符串):该函数能从“源字符串”中的头(leading)部,或尾(trailing)部,或者从头(leading)部和尾(trailing)部(both)去掉“要去掉的字符”。
如果没有指定头(leading)或尾(trailing),TRIM函数按默认(both)处理(该函数是8i版本引入的,在8i之前的版本中是两个函数LTRIM和RTRIM)。
可以通过例4-9的查询语句来去掉SQL*PLUS前面的文号。
例 4-9
SQL> SELECT TRIM('?'FROM'?SQL*PLUS is the SQL implementation例 4-9 结果
2 used in an Oracle RDBMS or ORDBMS.')
3 FROM dual;
也可以通过例4-10的查询语句来去掉row后面的的两个文号。
例 4-10
SQL> SELECT TRIM('?'FROM 'It can process data in sets of rows??')
2 FROM dual;
例 4-10 结果
以上两个例子都没有指出是去掉头部还是尾部的字符,因此Oracle按默认Both来处理。但在例4-9中只有在头部有“?”而例4-10中只有在尾部有“?”,所以Oracle系统可以正常的处理。但在例4-11中,TRIM函数的这种方法就要遇到麻烦了。
例 4-11
SQL> SELECT TRIM('s' FROM 'sql*plus is a fourth generation query language')
2 FROM dual;
例 4-11 结果
在例4-11的SQL语句中,我们是想去掉尾部的‘s’,但Oracle系统把开头的和结尾的“s”都去掉了。这显然不是我们所希望的结果。这时我们可以用trailing选项来解决这个问题。现在您可以将例 4-11的SQL语句修改如例 4-12
例 4-12
SQL> SELECT TRIM(trailing 's'FROM 'sql*plus is a foutrh generation uery languages')
2 FROM dual;
例 4-12 结果
这次终于得到了自己想要的结果。
我们并没有给出在TRIM函数中直接使用Leading选项的例子。如果读者感兴趣的话,不妨自己试着构造一个或者几个这样的例子。
REPLACE(正文表达式,要搜寻的字符串,替换字符串):该函数是在“正文表达式”中查找“要搜寻的字符串”,如果找到了就用“替代字符串”替代。
可以通过里4-13的查询语句来验证这一单行字符型函数。
例 4-13
SQL> SELECT REPLACE('SQL*PLUS supports loops or if statements','supports',
2 'does not support')
3 FROM dual;
例 4-13 结果
如果读者有时间的话,请仔细阅读从例4-9至4-13中的字符串。他们实际上是对SQL*PLUS的说明
为了帮助读者理解,在这里给出如下的中文译文:
█ 例 4-9 : SQL*PLUS是SQL的一种实现,它用在Oracle的关系型数据库管理系统或面向对象的关系型数据库管理系统中
█ 例 4-10: 它可以一次处理多行数据
█ 例 4-11: SQL*PLUS是一种第四代查询语言
█ 例 4-12: SQL*PLUS是一种第四代查询语言
█ 例 4-13: SQL*PLUS不支持循环和判断(分支)语句
当仔细的阅读完伊桑有关SQL*PLUS的说明之后,相信您不但对SQL*PLUS的理解一定会更加深刻,而且对SQL和SQL*PLUS之间的关系也会更加清楚。也许会又到了一个更高的层次。
-----------------------------待续------------------------
下一篇: