什么是函数
任何东西,只要它能接收输入,对输入进行加工并产生输出,它就可以被称之为函数。
例如:牛是一个函数,它的输入是草,而产生的输出是牛奶。
函数是最受结构化程序设计者们所吹捧的一种程序设计结构。它可以有一个或多个输入但只能有一个输出。即函数只有一个出口。如果您的程序基本上都是由函数组成的话,该程序很容易调试,也很容易被重用。
单行函数简介
单行函数的格式如下:
函数名【(参数1,参数2,参数3,…)】
其中参数可以为:■ 用户定义的常量■ 变量■ 列名■ 表达式
单行函数只对表中的一行数据进行操作,并且对每一行数据只产生一个输出结果。单行函数可以接受一个或多个参数,其产生的输出结果的数据类型可能与参数的数据类型不同。
单行函数可用在如下的子句中:
■ SELECT
■ WHERE
■ ORDER BY
而且单行函数可以嵌套。
单行函数包含:
■ 字符型
■ 数字型
■ 日期型转换型
■ 一般型函数
单行字符型函数
常用的字符型函数包括:
LOWER
UPPER
INITCAP
CONCAT
SUBSTR
LENGTH
INSTR
TRIM
REPLACE
LOWER(列名|表达式):该函数是把字符转换成小写。可以通过例4-1的查询语句来验证这一单行字符型函数。
例4-1
SQL> SELECT LOWER('SQL: Structural Query Language')
2 FROM dual;
例4-1结果
LOWER('SQL:STRUCTURALQUERYLANGUAGE')
sql:structural query language
UPPER(列名|表达式):该函数是把字符转换成大写。可以通过例4-2的查询语句来验证这一单行字符型函数。
例4-2
SQL> SELECT UPPER('sql is used exclusively in rdbmses')
2 FROM dual;
例4-2结果
UPPER('SQLISUSEDEXCLUSIVELYINRDBMSES')
SQL IS USED EXCLUSIVELY IN RDBMSES
INITCAP(列名表达式):该函数是把每个字的头一个字符转换成大写,其余的转换成小写。
可以通过如例4-3的查询语句来验证这一单行字符型函数。
例4-3
SQL> SELECT INITCAP('SQL is an ENGLISH LIKE language')
2 FROM dual;
例4-3结果
INITCAP('SQLISANENGLISHLIKELANGUAGE')
Sql Is An English Like Language
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结果
CONCAT('SQLALLOWSYOUTOMANIPULATETHEDATAINDB','WITHOUTANYPROGRAMMINGKNOWLEDGE')
SQL allows you to manipulate the data in DB without any programming knowledge
SUBSTR(列名)表达式,m,【n】):该函数是返回指定的子串。该子串是从第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结果
SUBSTR('SQLLETSYOUCONCENTRATEONWHATHASTOBEDONE',14)
concentrate on what has to be done
LENGTH(列名|表达式):该函数是返回列中或表达式中字符串的长度。可以通过例4-6的查询语句来验证这一单行字符型函数。
例4-6
SQL> SELECT LENGTH('SQL does not let youconcentrate on how it will be achieved')
2 FROM dual;
例4-6结果
LENGTH('SQLDOESNOTLETYOUCONCENTRATEONHOWITWILLBEACHIVED')
58
INSTR(列名|表达式,'字符串',【m】,【n】):该函数是返回所给字符串的数字位置,m表示从第m个字符开始搜索,n表示所给字符串出现的次数,它们的默认值都为1。
您可以通过例4-7的查询语句来验证这一单行字符型函数。
例4-7
SQL> SELECT INSTR('SQL allows for dynamic DB changes','f')
2 FROM dual;
例4-7结果
INSTR('SQLALLOWSFORDYNAMICDBCHANGES','F')
12
TRIM(【leading)trailing|both】要去掉的字符FROM 源字符串):该函数能够从“源字符串"中的头(leading)部,或尾(trailing)部,或从头(leading)部和尾(trailing)部(both)中去掉“要去掉的字符”。
如果没有指定头(leading)或尾(trailing),TRIM函数按默认(both)处理。
例4-9
SQL> SELECT TRIM('?' FROM '?SQL*PLUS is the SQL implementation
2 used in an Oracle RDBMS or ORDBMS.')
3 FROM dual;
例4-9结果
TRIM('?'FROM'?SQL*PLUSISTHESQLIMPLEMENTATIONUSEDINANORACLERDBMSORORDBMS.')
SQL*PLUS is the SQL implementation
used in an Oracle RDBMS or ORDBMS.
例4-11
SQL> SELECT TRIM('s' FROM'sql*plus isa fourth generation query languages')
2 FROM dual;
例4-11结果
TRIM('S'FROM'SQL*PLUSISAFOURTHGENERATIONQUERYLANGUAGES')
ql*plus is a fourth generation query language
例4-12
SQL> SELECT TRIM(trailing 's' FROM'sql*plus is a fourth generation query languages')
2 FROM dual;
例4-12结果
TRIM(TRAILING'S'FROM'SQL*PLUSISAFOURTHGENERATIONQUERYLANGUAGES')
sql*plus is a fourth generation query language
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结果
REPLACE('SOL*PLUSSUPPORTSLOOPSORIFSTATEMENTS','SUPPORTS','DOESNOTSUPPORT')
SQL*PLUS does not support loops or if statements