
4.3.2 函数
函数是一种特定的运算,在程序中要使用一个函数时,只要给出函数名和相应的参数,就能得到它的函数值。Access 提供了数百个标准函数,如聚合函数、数值函数、字符串函数、日期/时间函数、类型转换函数等。用户也可以通过 VBA 建立用户自定义函数。函数的使用格式为:

说明:
(1)参数表中的参数可以有一个或者多个(函数本身的要求),多个参数之间以逗号进行分隔。
(2)方括号表示可选部分。对于没有参数的函数,只需书写函数名,括号可以省略。
(3)函数调用时,参数可以是常量、变量、表达式,也可以是函数。
在查询中恰当地使用函数,能够为用户进行数据处理提供有效的方法,提高查询的效率。下面简单介绍常用标准函数及其功能。
1.聚合函数
聚合函数在聚合表达式中使用,用以计算数值型字段的各种统计值。常用聚合函数如表4.6所示。
表4.6 常用聚合函数

注意
在使用聚合函数时,如果未对记录进行分组,则计算该字段所有值的统计值。
【例4.12】建立表示以下条件的表达式。
(1)计算“选课成绩”表中每个学生的平均成绩。
(2)统计“选课成绩”表中每门课程的最高分。
分析:
(1)“选课成绩”表的主要结构是(学号、课程号、成绩),表中的每行记录的是某个学生的某门课程的成绩,所以统计每个学生的平均成绩时,必须先将学号一致的记录分在同一组,然后在组内计算所有成绩字段的平均值。按照学号分组后,相应的表达式如下:

注意
如果分组不同,即使表达式一样,计算结果也不同。如果本例中按照课程号分组,表达式不变,统计的则是每门课程的平均成绩。
(2)根据上一题的分析,需要先按课程号分组,然后写表达式,具体如下

2.数值函数
数值函数主要用于进行数值运算和数值处理,如取整、取数据的符号、求三角函数、求对数等,常用数值函数如表4.7所示。
表4.7 常用数值函数

注意
和聚合函数不同,数值函数的计算对象是某一个数据,而不是一组数据。所以,如果数值函数的参数是某一字段,则计算结果和该字段值的数量一样多。
【例4.13】建立表示以下查询条件的表达式。
(1)将“学生费用”表中的书本费抹去角和分。
(2)将“学生费用”表中的书本费四舍五入到角。
分析:
(1)抹去角和分相当于取整操作,对于正整数来说 Int()和 Fix()的计算结果一样。所以相应的表达式为:

(2)四舍五入函数是 Round(),所以相应的表达式为:

说明
Round()函数的第二个参数可以不写,使用默认值0,即四舍五入到个位。
3.字符串函数
字符串函数用于处理字符串,比如取字符串的长度、取子串、去除空串等。该函数可以处理文本型字段值。常用字符串函数如表4.8所示。
表4.8 常用字符串函数

【例4.14】建立表示以下条件的表达式。
(1)“学生”表中“2009级”的所有学生。
(2)去除“学生”表中“姓名”字段值的首尾空格。
(3)“课程”表中“课程名称”从第5个字到第6个字是“设计”的所有课程。
分析:
(1)Left([xh],4)="2009"
(2)Trim([xm])
(3)Mid([kcm],5,2)="设计"
说明
结合前面讲过的Like运算符和通配符,第3个条件的表达式还可以写成:

4.日期/时间函数
常用日期/时间函数如表4.9所示。
表4.9 常用日期/时间函数

【例4.15】建立表示以下条件的表达式。
(1)“学生”表中入学时间不满1年的学生。
(2)计算每个学生的生日,表示成“×月×日”。
分析:
(1)如果学生的入学时间加上一年后的日期大于系统日期,可以推断学生入学未满一年,所以表达式可以写成:

思考:还有没有其他表示方法?
(2)通过函数可以取得一个日期的年月日数字,然后将数字和“月”“日”汉字做字符串连接,所以表达式可以写成:

5.类型转换函数
由于运算符使用规则、函数规则以及其他运算需要,有时需要对数据进行类型转换。常用类型转换函数如表4.10所示。
表4.10 常用类型转换函数

说明
Access 的内置函数很多,没有必要一一学习,可以通过表达式生成器的提示以及帮助文档选择能满足用户需求的函数。应用中最重要的是书写正确的表达式,当然包括函数的正确使用,其中的重点是数据类型的匹配和参数的正确传递。