首页 理论教育数据库开发教程:函数、过程与应用示例

数据库开发教程:函数、过程与应用示例

【摘要】:在数据库系统中,函数相当于数据库中的命令,可以通过调用函数来执行数据库中的相关功能;过程相当于数据库中能实现某个功能的一段程序。从右边取子串函数。Val+Val,其结果为33。删除字符串空格函数。Round,其结果为256.3。Int,其结果为123。?

3.3 函数和过程

函数和过程是数据库系统的主要组成部分。在数据库系统中,函数相当于数据库中的命令,可以通过调用函数来执行数据库中的相关功能;过程相当于数据库中能实现某个功能的一段程序。

3.3.1 函数分类

在数据库系统中,常用的函数有字符处理函数、数值函数、日期时间函数、逻辑函数、数据库操作函数、系统函数和其他函数。

1.字符处理函数

常用的字符处理函数如下:

(1)返回字符串长度函数。其格式如下:Len(字符表达式)

功能:返回字符串的长度。

例如:

?Len(“student”),其结果为7。

?Len(“I am a student.”),其结果为15。

(2)取子串函数。其格式如下:

Substr((字符表达式),(数值表达式1),(数值表达式2))

功能:数值表达式1的值作为开始位置,字符表达式2的值作为长度,取子字符串。

例如:

?Substr(“student”,2,4),其结果为“tude”。

?Len(Substr(“I am a student.”,6,9)),其结果为9。

(3)从右边取子串函数。其格式如下:

Right((字符表达式),(数值表达式))

功能:返回字符串右边指定数量的字符。

例如:

?Right(“student”,3),其结果为“ent”。

?Right(“I am a student.”,10),其结果为“a student.”。

(4)从左边取子串函数。其格式如下:

Left((字符表达式),(数值表达式))

功能:返回字符串左边指定数量的字符。

例如:

?Left(“student”,4),其结果为“stud”。

?Left(“I am a student.”,4),其结果为“I am”。

(5)大写转化为小写函数。其格式如下:

Lower(字符表达式)

功能:将字符表达式中所有的大写字母转化为小写字母。

例如:

?Lower(“DATE”),其结果为“date”。

?Lower(“Date”),其结果为“date”。

(6)小写转化为大写函数。其格式如下:

Upper(字符表达式)

功能:将字符表达式中所有的小写字母转化为大写字母。

例如:

?Upper(“student”),其结果为“STUDENT”。

?Upper(“sTUdent”),其结果为“STUDENT”。

(7)字符型转化为数值型函数。其格式如下:

Val(字符表达式)

功能:把字符表达式中的字符转化为数值。

例如:

?Val(“S”),其结果为83。

?Val(“21”)+Val(“12”),其结果为33。

(8)数值型转化为字符型函数。其格式如下:

Str((数值表达式1),(数值表达式2),(数值表达式3))

功能:把数值表达式1中的数值型转化为字符型,数值表达式2的值作为返回字符串的长度,数值表达式3的值作为小数部分的位数。

例如:

?Str(256.12345,6,2),其结果为“256.12”。

?Str(256.256,6,2),其结果为“256.26”。

(9)删除字符串空格函数。其格式如下:

Alltrim (字符表达式)

功能:将字符表达式前后的空格删除。

例如:

?Alltrim(“ a student ”),其结果为“a student”。

?Alltrim(“ 数据库系统 ”),其结果为“数据库系统”。

(10)转化为ASCII码函数。其格式如下:

ASC(字符表达式)

功能:将字符表达式中的第一个字符转化为ASCII码并返回。例如:

?ASC(“Student”),其结果为83。

?ASC(“I am a student.”),其结果为73。

(11)转化为字符函数。其格式如下:

Chr(数值表达式)

功能:将数值表达式转化为字符表达式。

例如:

?Chr(83),其结果为S。

?Chr(73),其结果为I。

(12)确定字符串位置函数。其格式如下:

AT(字符表达式1,字符表达式2,数值表达式)

功能:确定字符表达式1在字符表达式2中第“数值表达式”次出现的位置。

例如:

?AT(“student”,“I am a student.”,1),其结果为8。

?AT(“系统”,“数据库系统”,1),其结果为7。

2.数值函数

常用的数值处理函数如下:

(1)取绝对值函数。其格式如下:Abs(数值表达式)

功能:对数值表达式取绝对值。

例如:

?Abs(+156),其结果为156。

?Abs(-125),其结果为125。

(2)取最大值函数。其格式如下:

Max((数值表达式1),(数值表达式2),(数值表达式3),…)

功能:在数值表达式1,数值表达式2,数值表达式3,…中取最大值。

例如:

?Max(1,2,3),其结果为3。

?Max(“A”,“B”,“C”),其结果为“C”。

(3)取最小值函数。其格式如下:

Min(数值表达式1,数值表达式2,数值表达式3,…)

功能:在数值表达式1,数值表达式2,数值表达式3,…中取最小值。

例如:

?Min(1,2,3),其结果为1。

?Min(“A”,“B”,“C”),其结果为“A”。

(4)取余函数。其格式如下:

Mod((数值表达式1),(数值表达式2))

功能:取数值表达式1除以数值表达式2的余数。

例如:

?Mod(5,4),其结果为1。

?Mod(2,2),其结果为0。

(5)求e的x次方函数。其格式如下:

Exp(数值表达式)

功能:求e的数值表达式值的次方,e的取值为2.72。

例如:

?Exp(2),其结果为7.39。

?Exp(1),其结果为2.72。

(6)求平方根函数。其格式如下:

Sqrt(数值表达式)

功能:对数值表达式求平方根。

例如:

?Sqrt(4),其结果为2.00。

?Sqrt(81),其结果为9.00。

(7)四舍五入函数。其格式如下:

Round((数值表达式1),(数值表达式2))

功能:以数值表达式2的值为小数位数对数值表达式1进行四舍五入操作。

例如:

?Round(123.2586,3),其结果为123.259。

?Round(256.32,1),其结果为256.3。

(8)取整函数。其格式如下:

Int(数值表达式)

功能:对数值表达式进行取整操作。

例如:

?Int(123.65),其结果为123。

?Int(123.657),其结果为123。

(9)随机函数。其格式如下:

Rand(数值表达式)

功能:取随机数。

例如:

?Rand(0),其结果为0.97。

3.日期时间函数

常用的日期时间函数如下:

(1)取当前时间日期函数。其格式如下:

Datetime()

功能:返回当前时间日期函数值。

例如:

?Datetime(),其结果为04/10/2005/ 15:02:15 PM。

(2)取当前时间函数。其格式如下:

Time()

功能:返回当前时间。

例如:

?Time(),其结果为15:02:15 PM。

(3)取当前日期函数。其格式如下:

Date()

功能:返回当前日期值。

例如:

?Date(),其结果为04/10/2005。

(4)取当前秒钟函数。其格式如下:

Sec()

功能:返回当前秒钟值。

(5)取当前分钟函数。其格式如下:

Minute()

功能:返回当前分钟值。

(6)取当前小时函数。其格式如下:(www.chuimin.cn)

Hour()

功能:返回当前小时值。

(7)取当前天数函数。其格式如下:

Day()

功能:返回当前天数值。

(8)取当前月份函数。其格式如下:

Month()

功能:返回当前月份值。

(9)取当前年份函数。其格式如下:

Year()

功能:返回当前年份值。

(10)把当前时间日期转化为字符型函数。其格式如下:

Dtoc(日期时间表达式)

功能:把当前数值型日期时间转化为字符型日期时间。

例如:

?Dtoc(2005/04/10),其结果为“04/10/2005”。

(11)把当前字符型日期转化为日期型函数。其格式如下:

Ctod(字符表达式)

功能:把当前字符型日期转化为日期型。

例如:

?Ctod(“04/10/2005”),其结果为04/10/05。

4.逻辑函数

常用的逻辑函数如下:

(1)检测数据类型函数。其格式如下:

Type(字符表达式)

功能:检测字符表达式的数据类型,不同的返回结果表示不同的数据类型。具体数据类型如表3.1所示。

表3.1 返回字母与数据类型表

img69

例如:

?Type(“数据库”),其结果为U。

(2)检测“空”值函数。其格式如下:

Empty(工作区)

功能:检测字符表达式是否为空,如果是,则返回值为真(.T.),否则返回值为假(.F.)。

例如:

?Empty(),其结果为.T.。

(3)检测函数。其格式如下:

Between(表达式1,表达式2,表达式3)

功能:检测表达式1是否在表达式2和表达式3之间,如果在,则返回值为真(.T.),否则返回值为假(.F.)。

例如:

?Between(“系统”,“数据库系统”,“概论”),其结果为.F.。

?Between(“student”,“I am a student.”,“I am a student.”),其结果为.T.。

5.数据库操作函数

常用的数据库操作函数如下:

(1)检测文件头函数。其格式如下:

Bof(工作区)

功能:检测工作区是否为文件头,如果是,则返回值为真(.T.),否则返回值为假(.F.)。

例如:

?Bof(1),其结果为.F.。

(2)检测文件尾函数。其格式如下:

Eof(工作区)

功能:检测工作区是否为文件尾,如果是,则返回值为真(.T.),否则返回值为假(.F.)。

例如:

?Eof(2),其结果为.F.。

(3)检测当前记录号函数。其格式如下:

Recno(工作区)

功能:返回检测文件工作区当前的记录号,返回值为数字。

例如:

?Recno(3),其结果为1。

(4)检测文件记录数函数。其格式如下:

Reccount(工作区)

功能:检测文件工作区的记录数是否与表达式的值相同,如果相同,则返回值为真(.T.),否则返回值为假(.F.)。

例如:

?Reccount(3),其结果为.T.。

6.系统函数

常用的系统函数只有一种,其格式如下:

Sys(字符表达式)

功能:返回机器名和网络机器号。

例如:

?Sys(1),其结果是2453509。

7.其他函数

在Visual FoxPro中,常用的其他函数如下:

(1)显示提示信息函数。其格式如下:

Messagebox(提示信息)

功能:系统运行时,以窗口的形式显示提示信息。

注意:提示信息函数的结果为数字,有多种对话框类型,不同的类型代表不同的含义。对话框的类型及含义如表3.2所示。

(2)自定义函数:在程序设计过程中经常为实现一个特定功能而编写一个程序段,作为一个模块,以便在其他程序中使用该功能时调用该程序,这种完成特定功能的程序段称之为自定义函数。

表3.2 对话框的类型及含义

img70

自定义函数的定义格式如下:

Function <函数名称>

Parameters <参数表>

<语句序列>

Return <表达式>

Endfunc

其中,Function表示函数定义开绐,并给函数命名,说明该函数在调用程序中;Parameters是指函数中使用的变量名表或可以接收的参数,各个参数之间用逗号隔开;<语句序列>是指实现函数功能的命令语句;Return是指函数的返回值,省略时,函数返回值为.T.,Endfunc表示函数定义结束。

例如:定义一个自定义函数。

Function abc            &&命令函数名

Parameters M            &&定义参数

N=1                &&语句序列

Do While M>=1

N=M*N

M=M-1

Enddo

?N

Return N             &&返回主程序

Endfunc

3.3.2 调用函数

在系统程序的设计过程中需要实现函数功能时,直接调用函数名即可,其调用格式如下:

函数名<参数表>

例如:调用自定义函数。

Function abc

Parameters M           &&定义参数

N=1

Do While M>=1

N=M*N

M=M-1

Enddo

?N

Return N

Endfunc

Set talk off

Clear

Abc               &&调用函数

?Salary

Set talk on

例如:调用系统函数。

Max(m,n)&&取最大值函数

If m>n

Max=m

Else

Max=n

?Max

Set talk off

Clear

Max              &&调用函数?Max

Set talk on

3.3.3 过程和过程设计

过程和函数所实现的功能相同,过程也是一个程序段,可以在任何时间相互调用。

过程设计的格式如下:

Procedure <过程名>

Parameters <形参表>

<命令序列>

Return to master to 上级过程名

Endproc

其中,Procedure表示定义过程开始,并为过程命名;Parameters是指过程中使用的变量名表;<命令序列>是指实现过程功能的命令语句;Return是指返回到执行的程序中;Endproc表示定义过程结束。

在系统程序运行时,可以通过Do来调用过程,其格式如下:

Do 过程名

例如:定义一个过程并调用。

Set talk off

Clear

M=10

Do abc with M            &&调用过程

Set talk on

过程设计如下:           &&设计过程

Procedure M            &&定义参数

N=1

Do While M>0

N=N*M

M=M-1&&M             循环一次,值减去1

Enddo

?N

Return&&             返回主程序

Endproc