表达式语法指南

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

使用 Microsoft Access 时,通常需要处理数据中不直接的值。 例如,可能需要计算订单的销售税,或订单本身的总计值。 可以使用表达式计算这些值。 要使用表达式,必须首先使用正确的语法进行编写。 语法是一组规则,表达式中的字词和符号依据这些规则正确地组合在一起。 Access 中的表达式最初阅读起来有一些困难。 但在充分理解表达式语法并稍作练习后,这就变得容易多了。

本文内容

表达式概述

表达式是以下部分或全部内容的组合:内置或用户定义的函数、标识符、运算符、值和计算结果为一个值的常量。

表达式的组成部分

例如,以下表达式包含常见的组成部分:

=Sum([Purchase Price])*0.08 
  • Sum() 是内置函数
  • [Purchase Price] 是标识符
  • * 是数学运算符
  • 0.08 是常量

此表达式可用在窗体页脚或报表页脚的文本框中,用于计算一组项目的销售税。

表达式可能会比此示例复杂得多或简单得多。 例如,此布尔表达式仅包含运算符和常量:

>0

此表达式返回:

  • True 当它与大于 0 的数字进行比较时。
  • False 当它与小于 0 的数字进行比较时。

在控件或表字段的“验证规则”属性中使用此表达式可确保仅输入正值。 这些表达式可在多处使用,用于执行计算、操作字符或测试数据。 表、查询、窗体、报表和宏全都具有接受表达式的属性。 例如,你可以在控件的“控件来源”和“默认值”属性中使用表达式。 你也可以在表字段的“验证规则”属性中使用表达式。

返回页首

表达式的组成部分

要生成表达式,请使用函数、运算符、常量和值组合标识符。 任何有效的表达式都必须包含至少一个函数或至少一个标识符,并且还可以包含常量或运算符。 还可以将表达式用作另一个表达式的一部分,通常用作函数的参数。 这称为嵌套表达式。

  • 标识符 一般格式为:

    [Collection name]![Object name].[Property name]
    

    只需为标识符指定足够的组成部分,就可使其在表达式的上下文中具有唯一性。 标识符采用 的形式 [Object name]并不少见。

  • 函数 一般格式为:

    Function(argument, argument)
    

    其中一个参数通常是标识符或表达式。 部分函数不需要参数。 使用特定函数之前,请查看该函数的语法。 有关详细信息,请参阅函数(按类别排列)

  • 运算符 一般格式为:

    Identifier operator identifier
    

    还有一些例外的格式,运算符一节会详细介绍。

  • 常量 一般格式为:

    Identifier comparison_operator constant
    
  • 值可以出现在表达式中的许多位置。

返回页首

对象、集合和属性

Access 数据库中的所有表格、查询、窗体、报表和字段都可称为对象。 每个对象都有一个名称。 某些对象已命名,例如从 Microsoft Office Access 联系人模板创建的数据库中的联系人列表。 创建新对象时,需要为其命名。

由特定类型对象的所有成员组成的集称为集合。 例如,由数据库中所有表格组成的集是一个集合。 作为数据库中某个集合的成员的某些对象也可能是包含其他对象的集合。 例如,表对象是包含字段对象的集合。

对象具有属性,用于描述对象的特征,并提供更改这些特征的方法。 例如,查询对象具有“默认视图”属性,该属性描述了查询在运行时的显示方式,同时可供用户指定所需显示方式。

下图说明了集合、对象与属性之间的关系:

集合、对象和属性之间的关系 3 A 属性


2 对象


1 A 集合

返回页首

标识符

在表达式中使用对象、集合或属性时,可通过使用标识符引用该元素。 标识符包括所标识元素的名称及其所属元素的名称。 例如,一个字段的标识符包括该字段的名称及该字段所属表格的名称。 此类标识符的示例为:

[Customers]![BirthDate]

在某些情况下,元素名称本身可用作标识符。 当元素在所创建表达式的上下文中具有唯一性时即为如此。 上下文暗含标识符的其余部分。 例如,如果设计的查询只使用一个表,字段名称可单独用作标识符,因为表中的字段名称在该表中必须是唯一的。 由于只使用了一个表,在查询中用于引用字段的任何标识符中都暗含了表名。

在其他情况下,必须明确标识符的各个部分,以便引用正常运行。 当标识符在表达式的上下文中并非唯一时即为如此。 具有多义性时,必须显式指示足够的标识符组成部分,使其在上下文中具有唯一性。 例如,假设要设计的查询使用了名为“产品”的表和名为“订单”的表,而且两个表都有名为 ProductID 的字段。 在这种情况下,在查询中用于引用任一 ProductID 字段的标识符除了包含字段名称外,还必须包含表格名称。 例如:

[Products]![ProductID]

标识符运算符 可在标识符中使用三种运算符:

  • bang 运算符 (!)
  • 点运算符 (.)
  • 方括号运算符 ([ ])

这些运算符的使用方式是:将标识符的每个部分前后加上方括号,然后使用感叹号或点运算符将这些部分联接在一起。 例如,在名为 Employees 的表中名为“姓氏”的字段的标识符可以表示为 [Employees]![Last Name]。 感叹号运算符告知 Access,其后面部分表示的对象属于其前面部分表示的集合。 在此例中,[Last Name] 是属于 [Employees] 集合的字段对象,而后者本身是表对象。

严格地说,不必始终在标识符或部分标识符前后键入方括号。 如果标识符中没有空格或其他特殊字符,Access 在读取表达式时自动添加括号。 但是,最好自行键入括号,这有助于避免错误,还可以作为表达式的特定部分是标识符的可视线索。

返回页首

函数、运算符、常量和值

若要创建表达式,需要的不仅仅是标识符,还需要执行某种操作。 在表达式中使用函数、运算符和常量执行操作。

函数

函数是可以在表达式中使用的过程。 某些函数(如 Date)不需要任何输入即可工作。 但是,大多数函数需要输入,称为参数。

在本文开头的示例中,DatePart 函数使用两个参数:一个是 interval 参数,值为 , "yyyy" 一个是日期参数,值为 [Customers]![BirthDate]。 DatePart 函数至少需要这两个参数(时间间隔和日期),但最多可接受四个参数。

下面列出了表达式中的一些常用函数。 单击每个函数的链接,了解用于该函数的语法的详细信息。

  • Date 函数用于向表达式中插入当前系统日期。 它通常与 Format 函数配合使用,还可与包含日期/时间数据的字段的字段标识符一起使用。

    =Date()
    
  • DatePart 函数用于确定或提取日期的一部分,通常是从字段标识符获取的日期,但有时是另一个函数(如 Date)返回的日期值。

    DatePart ( "yyyy", Date())
    
  • DateDiff 函数用于确定两个日期之间的差异,通常是从字段标识符获取的日期和使用 Date 函数获取的日期之间的差值。

    =DateDiff("d", Now(), [Orders].[ReceiveBefore])-10 
    
  • Format 函数用于将格式应用于某个标识符,以及将格式应用于另一个函数的结果。

    Format([Date],"ww")=Format(Now(),"ww")-1 
    
  • IIf 函数用于将表达式计算为 true 或 false,如果表达式的计算结果为 true,则返回一个值;如果表达式的计算结果为 false,则返回其他值。

    =IIf([CountryRegion]="Italy", "Italian", "Some other language")
    
  • InStr 函数用于搜索字符或字符串在另一个字符串中的位置。 搜索的字符串通常是从字段标识符中获取的。

    InStr(1,[IPAddress],".")
    
  • LeftMidRight 这些函数用于从字符串中提取字符,开始位置为最左边的字符 (Left)、中间的特定位置(Mid),或最右边的字符 (Right)。 它们常与 InStr 函数配合使用。 这些函数提取字符的字符串通常是从字段标识符获取的。

    Left([ProductName], 1)
    Right([AssetCode], 2) 
    Mid([Phone],2,3) 
    
    

有关函数列表,请参阅函数(按类别排列)

运算符

运算符是一个字词或符号,表示表达式其他元素之间的特定算术或逻辑关系。 运算符可以是:

  • 算术,例如加号 (+) 。
  • 比较,例如等号 (=) 。
  • 逻辑,例如 Not
  • 串联,例如 &
  • 特殊,例如 Like

运算符通常用来表示两个标识符之间的关系。 下表介绍了可在 Access 表达式中使用的运算符。

算法

可使用算术运算符计算两个或更多数字的值,或将数字的符号由正号更改为负号。

运算符 用途 示例
+ 对两个数字求和。 [小计]+[销售税]
- 得出两个数字之间的差值,或表示数字的负值。 [价格]-[折扣]
* 将两个数字相乘。 [数量]*[价格]
/ 用第一个数字除以第二个数字。 [总数]/[项目计数]
\ 将两个数字舍入为整数,用第一个数字除以第二个数字,然后结果取整。 [已登记数]\[房间数]
Mod 用第一个数字除以第二个数字,并仅返回余数。 [已登记数] Mod [房间数]
^ 数字的指数次幂。 数字 ^ 指数

比较

使用比较运算符比较值,并返回结果 true,false 或 Null(未知值)。

运算符 用途
< 确定第一个值是否小于第二个值。
<= 确定第一个值是否小于或等于第二个值。
> 确定第一个值是否大于第二个值。
>= 确定第一个值是否大于或等于第二个值。
= 确定第一个值是否等于第二个值。
<> 确定第一个值是否不等于第二个值。

在所有情况下,如果第一个值或第二个 Null值为 ,则结果也是 Null。 由于 Null 表示未知值,因此与 Null 的任何比较的结果也是未知的。

Logical

可以使用逻辑运算符来合并两个值,并返回结果 true、false 或 Null。 可能还会看到逻辑运算符也称为布尔运算符。

运算符 用法 说明
And Expr1 And Expr2 Expr1 和 Expr2 为 true 时,则为 true。
Or Expr1 Or Expr2 Expr1 或 Expr2 为 true 时,则为 true。
Eqv Expr1 Eqv Expr2 Expr1 和 Expr2 均为 true 或均为 false 时,则为 true。
Not Not Expr Expr 不为 true 时,则为 true。
Xor Expr1 Xor Expr2 Expr1 为 true 或 Expr2 为 true,但不同时为 true 时,则为 true。

连接运算符

使用连接运算符将两个文本值合并到为一个字符串。

运算符 用法 说明
& string1 & string2 合并两个字符串,组成一个字符串。
+ string1 + string2 合并两个字符串,组成一个字符串,并传播 null 值。

特殊运算符

可以使用下表中所述的特殊运算符。

运算符 说明 详细信息
Is Null or Is Not Null 确定一个值为 Null 还是 Not Null。
Like "pattern" 使用通配符运算符 ?*匹配字符串值。 Like 运算符
Between val1 And val2 确定数字或日期值是否在某个范围内。 Between...And 运算符
In(string1,string2...) 确定一个字符串值是否包含在一组字符串值内。 In 运算符

常量

常量是一个不会更改的已知值,可以在表达式中使用。 Access 中有四个常用常量:

  • True 指示逻辑上为 true 的内容。
  • False 指示逻辑上为 false 的内容。
  • Null 指示缺少已知值。
  • "" (empty string) 指示已知为空的值。

常量可用作函数的参数,并可在表达式中用作条件的一部分。 例如,可以使用空字符串常量 ("") 作为查询中某个列的条件的一部分来计算该列的字段值,方法是输入以下内容作为条件: <>""。 在此示例中, <> 是运算符, "" 是常量。 一起使用时,它们表示应该将应用它们的标识符与空字符串进行比较。 当标识符的值为空字符串之外的任何内容时,该表达式结果为 true。

使用常量时要 Null 小心。 在大多数情况下, Null 将 与比较运算符结合使用将导致错误。 如果要在表达式中将值与 Null 进行比较,请使用 Is NullIs Not Null 运算符。

可以在表达式中使用数字 1,254 或字符串“输入 1 和 10 之间的数字。”等文本值。此外,还可以使用数值,这些数值可以是包括符号和小数点(如需)的一系列数字。 如果不使用符号,Access 将假设数字值为正值。 若要使值为负值,请包括减号 (-) 。 还可以使用科学记数法。 为此,包含“E”或“e”和指数符号(例如:1.0E-6)。

将文本字符串用作常量时,请将其括在引号中,确保 Access 能够正确解释它们。 在某些情况下,Access 会为你提供引号。 例如,在表达式中键入文本用作验证规则或查询条件时,Access 会将你的文本字符串自动括在引号中。

例如,如果键入文本 Paris,Access 会在表达式中显示“Paris”。 如果希望表达式生成实际用引号括起来的字符串,请将嵌套字符串括在单个 () ' 引号内,或者用三组双 (") 引号括起来。 例如,以下表达式是等效的:

Forms![Contacts]![City]. DefaultValue = ' "Paris" ' 
Forms![Contacts]![City].DefaultValue = " " "Paris" " " 

若要使用日期/时间值,请将值括在井号 (#) 。 例如,#3-7-17#、#7-Mar-17# 和 #Mar-7-2017# 均为有效的日期/时间值。 在 Access 遇到用 # 字符括起来的有效日期/时间值时,它会自动将该值作为“日期/时间”数据类型处理。

返回页首

表达式的嵌套限制是 65

嵌套超过 65 个级别的表达式在浏览器中不起作用,因此不应在 Access Web 数据库中使用任何此类表达式。 你不会收到任何错误消息 - 表达式将不起作用。

使用 &ANDOR 运算符可以在服务器上创建其他未反映在 Access 客户端中的嵌套级别。 例如,表达式 "a" & "b" & "c" 不嵌套在表达式生成器中,但在 SharePoint 中它变为 concatenate.Db("a", concatenate.Db("b", "c") )。 此转换将创建一个嵌套层。 在单个表达式中使用多个连续 &的 、 ANDOR 运算符可能会导致超过服务器的嵌套限制 65,此时表达式在浏览器中不起作用。

返回页首

使用表达式生成器表达式简介生成表达式表达式示例