表达式示例

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

本文提供 Access 中的表达式示例。 表达式将数学或逻辑运算符、常量、函数、表字段、控件和属性组合成单个值。 可以使用 Access 中的表达式来计算值、验证数据和设置默认值。

本文内容

窗体和报表

所有窗体和报表表达式

文本操作; 其他控件中的值; 日期操作 页眉和页脚; 计数、求和平均值; 仅包含两个值的条件 算术运算; SQL 聚合函数

查询和筛选

所有查询和筛选表达式

文本操作; SQL 聚合函数; 匹配文本值; 将记录模式与 Like 匹配; 更新查询 算术运算; 查找缺失的数据; 匹配日期条件; 将行与 SQL 聚合匹配; SQL 语句 日期操作; 包含子查询的计算字段; 缺少数据的字段; 将字段与子查询匹配

表格

所有表表达式

字段默认值 字段有效性规则

所有宏表达式

表单和报表

本部分中的表显示了在窗体或报表上的控件中计算值的表达式。 若要创建计算控件,请在控件的 属性中 ControlSource 输入表达式,而不是在表字段或查询中。

注意

使用 条件格式突出显示数据时,还可以在窗体或报表中使用表达式。

文本操作

下表中的表达式使用 & (和) 和 + (加上) 运算符来组合文本字符串、使用内置函数处理文本或以其他方式创建计算控件。

表达式 结果
="N/A" 显示 N/A。
=[FirstName] & " " & [LastName] 显示名为 FirstName 和 LastName 的表字段中的值。 在此示例中, & 运算符用于合并 FirstName 字段、用引号) 括起来 (空格字符和 LastName 字段。
=Left([ProductName], 1) Left使用 函数在名为 ProductName的字段或控件中显示值的第一个字符。
=Right([AssetCode], 2) Right使用 函数在名为 AssetCode的字段或控件中显示值的最后两个字符。
=Trim([Address]) Trim使用 函数在删除前导空格和尾随空格后显示控件的值Address
=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode]) IIf如果 Region 控件为 null,City则使用 函数显示 和 PostalCode 控件的值。 否则,它将显示 、 和 PostalCode 控件的值CityRegion,用空格分隔。
=[City] & (" " + [Region]) & " " & [PostalCode] +如果字段或控件中的值为 null,City则使用 运算符和 null 传播显示 和 PostalCode 控件的值Region。 否则,它将显示 、 RegionPostalCode 字段或控件的值City(用空格分隔)。 Null 传播意味着,如果表达式的任何部分为 null,则整个表达式为 null。 运算符 + 支持 null 传播, & 但运算符不支持。

返回页首

页眉和页脚

Page使用 和 Pages 属性在窗体或报表中显示或打印页码。 这些属性仅在打印或打印预览期间可用,因此它们不会显示在窗体或报表的属性表中。 通常,在窗体或报表的页眉或页脚部分放置文本框,然后使用如下表所示的表达式。

有关在窗体和报表中使用页眉和页脚的详细信息,请参阅在窗体或报表中插入页码一文。

表达式 结果
=[Page] 1
="Page " & [Page] 第 1 页
="Page " & [Page] & " of " & [Pages] 第 1 页,共 3 页
=[Page] & " of " & [Pages] & " Pages" 第 1 页(共 3 页)
=[Page] & "/" & [Pages] & " Pages" 第 1 页/共 3 页
=[Country/region] & " - " & [Page] UK - 1
=Format([Page], "000") 001
="Printed on: " & Date() 打印时间:17/12/31

返回页首

算数运算

可使用表达式对两个或更多字段或控件中的值进行加减乘除运算。 可以使用表达式对日期执行算术运算。 例如,假设有名为 RequiredDate 的日期/时间表字段。 在字段或绑定到字段的控件中,表达式 =[RequiredDate] - 2 返回的日期/时间值等于 RequiredDate 字段中当前值之前的两天。

表达式 结果
=[Subtotal]+[Freight] Subtotal 和 Freight 字段或控件值的和。
=[RequiredDate]-[ShippedDate] RequiredDate 和 ShippedDate 字段或控件日期值之间的时间间隔。
=[Price]*1.06 Price 字段或控件的值与 1.06 的积(Price 值增加 6%)。
=[Quantity]*[Price] Quantity 和 Price 字段或控件值的积。
=[EmployeeTotal]/[CountryRegionTotal] EmployeeTotal 和 CountryRegionTotal 字段或控件值的商。

注意

如果在表达式中使用算术运算符 (+-*/) ,并且其中一个控件为 null,则整个表达式的结果为 null。 这称为 null 传播。 如果控件可能具有 null 值,则可以通过使用 Nz 函数将 null 值转换为零来避免 null 传播。 例如,使用 =Nz([Subtotal])+Nz([Freight])

返回页首

其他控件中的值

有时需要其他位置(例如另一窗体或报表的字段或控件中)的值。 可使用表达式返回另一字段或控件中的值。

下表列出了可用于窗体中计算控件的表达式示例。

表达式 结果
=Forms![Orders]![OrderID] Orders 窗体中 OrderID 控件的值。
=Forms![Orders]![Orders Subform].Form![OrderSubtotal] Orders 窗体名为 Orders Subform 的子窗体中 OrderSubtotal 控件的值。
=Forms![Orders]![Orders Subform]![ProductID].Column(2) Orders 窗体名为 Orders Subform 的子窗体中的多列列表框 ProductID 中第 3 列的值。 (请注意,0 指第 1 列,1 指第 2 列,依此类推)。
=Forms![Orders]![Orders Subform]![Price] * 1.06 Orders 窗体名为 Orders Subform 的子窗体中 Price 控件的值与 1.06 的积(Price 控件的值增加 6%)。
=Parent![OrderID] 当前子窗体的主窗体或父窗体中 OrderID 控件的值。

下表中的表达式展示了在报表上使用计算控件的一些方法。 这些表达式引用报表属性

表达式 结果
=Report![Invoice]![OrderID] 名为 “OrderID” 控件的值在名为 “Invoice” 的报告中。
=Report![Summary]![Summary Subreport]![SalesTotal] 在 “摘要报告” 中名为 “摘要子报告” 中子报告上的 SalesTotal 控件的值。
=Parent![OrderID] 当前子报表的主报表或父报表中 OrderID 控件的值。

返回页首

计数、求和以及求平均值

可使用名为聚合函数的函数类型计算一个或多个字段或控件的值。 例如,可计算报表中组页脚的组合计,或计算窗体中行项目的订单小计。 还可以计算一个或多个字段中的项目数或计算平均值。

下表中的表达式描述了使用 Avg、Count 和 Sum 等函数的几种方法。

表达式 说明
=Avg([Freight]) 使用 Avg 函数以显示名为 “Freight" 的表字段或控件值的平均值。
=Count([OrderID]) 使用 “计数” 功能显示 OrderID 控件中的记录数。
=Sum([Sales]) 使用 Sum 函数显示 Sales 控件的值之和。
=Sum([Quantity]*[Price]) 使用 Sum 函数显示 Quantity 和 Price 控件值的积之和。
=[Sales]/Sum([Sales])*100 通过将控件的值 Sales 除以控件中 Sales 所有值的总和来显示销售额百分比。 如果将 控件的 属性设置为 FormatPercent,则不要在 *100 表达式中包含 。

有关如何使用聚合函数以及汇总字段和列中值的详细信息,请参阅使用查询对数据进行求和使用查询对数据进行计数使用“汇总行”在数据表中显示列汇总在数据表中显示列汇总

返回页首

SQL 聚合函数

需要选择性求和或计数时,请使用名为 SQL 或域聚合函数的函数类型。 “域”包含一个或多个表中的一个或多个字段,或一个或多个窗体或报表上的一个或多个控件。 例如,可将表字段中的值与窗体控件中的值进行匹配。

表达式 说明
=DLookup("[ContactName]", "[Suppliers]", "[SupplierID] = " & Forms("Suppliers")("[SupplierID]")) 使用 DLookup 函数返回 Suppliers 表中这样的 ContactName 字段的值,其所对应 SupplierID 字段的值与 Suppliers 窗体中 SupplierID 控件的值相匹配。
=DLookup("[ContactName]", "[Suppliers]", "[SupplierID] = " & Forms![New Suppliers]![SupplierID]) 使用 DLookup 函数返回 Suppliers 表中这样的 ContactName 字段的值,其所对应 SupplierID 字段的值与 New Suppliers 窗体中 SupplierID 控件的值相匹配。
=DSum("[OrderAmount]", "[Orders]", "[CustomerID] = 'RATTC'") 使用 DSum 函数返回 Orders 窗体中 CustomerID 为 RATTC 的 OrderAmount 字段中值的总计。
=DCount("[Retired]","[Assets]","[Retired]=Yes") 使用 DCount 函数返回 Assets 表中 Retired 字段(Yes/No 字段)中 Yes 值的数量。

返回页首

数据操作

跟踪日期和时间是一项基本数据库活动。 例如,可计算从发票日期起已经过的天数,以计算应收帐款的帐龄。 可用多种方式设置日期和时间格式,如下表所示。

表达式 说明
=Date() 使用 Date 函数以 的形式 mm-dd-yy显示当前日期,其中 mm 是月份 (1 到 12) , dd 是 (1 到 31) 的日期,是 yy 1980 (2099) 年的最后两位数字。
=Format(Now(), "ww") 使用 Format 函数显示当前日期的年份的周数,其中 ww 表示第 1 到 53 周。
=DatePart("yyyy", [OrderDate]) 使用 DatePart 函数显示 OrderDate 控件的四位数年份值。
=DateAdd("y", -10, [PromisedDate]) 使用 DateAdd 函数显示 PromisedDate 控件值前 10 天的日期。
=DateDiff("d", [OrderDate], [ShippedDate]) 使用 DateDiff 函数显示 OrderDate 和 ShippedDate 控件值之间相差的天数。
=[InvoiceDate] + 30 对日期使用算术运算,计算出 InvoiceDate 字段或控件中日期后 30 天的日期。

返回页首

仅两个值的条件

下表中的示例表达式使用 IIf 函数返回两个可能值中的一个。 传递 IIf 函数三个参数:第一个参数是必须返回 TrueFalse 值的表达式。 第 2 个参数是该表达式为 True 时返回的值,第三个参数是该表达式为 False 时返回的值。

表达式 说明
=IIf([Confirmed] = "Yes", "Order Confirmed", "Order Not Confirmed") 使用 IIf (Immediate If) 函数显示消息“Order Confirmed”(如果“确认”控件的值为 Yes);否则,它将显示消息 "Order Not Confirmed."
=IIf(IsNull([Country/region]), " ", [Country]) 使用 IIf 和 IsNull 函数,如果 Country/region 控件的值为 null 则显示空字符串;否则显示 Country/region 控件的值。
=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode]) 使用 IIf 和 IsNull 函数,如果 Region 控件中的值为 null,则显示 City 和 PostalCode 控件的值;否则显示 City、Region 和 PostalCode 字段或控件的值。
=IIf(IsNull([RequiredDate]) Or IsNull([ShippedDate]), "Check for a missing date", [RequiredDate] - [ShippedDate]) 使用 IIf 和 IsNull 函数,如果 RequiredDate 减 ShippedDate 的结果为 null,显示“Check for a missing date”;否则显示 RequiredDate 和 ShippedDate 控件日期值之间的时间间隔。

返回页首

查询和筛选

本节包含的表达式示例可用于在查询中创建计算字段或向查询提供条件。 计算字段即查询中由表达式所得的列。 例如,可以计算值、组合名字和姓氏等文本值,或设置部分日期的格式。

在查询中使用条件可限制所处理的记录。 例如,可以使用 Between 运算符提供开始日期和结束日期,并将查询结果限制为在这些日期之间发货的订单。

以下部分提供了用于查询的表达式示例。

查询中的文本操作

下表中的表达式使用 &+ 运算符合并文本字符串,使用内置函数对文本字符串执行操作,或者对文本执行操作以创建计算字段。

表达式 说明
FullName: [FirstName] & " " & [LastName] 创建名为 FullName 的字段,显示 FirstName 和 LastName 字段的值(用空格分隔)。
Address2: [City] & " " & [Region] & " " & [PostalCode] 创建名为 Address2 的字段,显示 City、Region 和 PostalCode 字段中的值(用空格分隔)。
ProductInitial: Left([ProductName], 1) 创建名为 ProductInitial 的字段,然后使用 Left 函数,在 ProductInitial 字段中显示 ProductName 字段中值的第一个字符。
TypeCode: Right([AssetCode], 2) 创建名为 TypeCode 的字段,然后使用 Right 函数,显示 AssetCode 字段中值的最后两个字符。
AreaCode: Mid([Phone],2,3) 创建名为 AreaCode 的字段,然后使用 Mid 函数,显示从 Phone 字段中值的第 2 个字符开始的 3 个字符。
ExtendedPrice: CCur([Order Details].[Unit Price]*[Quantity]*(1-[Discount])/100)*100 命名计算字段 ExtendedPrice,并使用 CCur 函数来计算已享受折扣的行项目总计。

返回页首

查询中的算术运算

可使用表达式对两个或更多字段或控件中的值进行加减乘除运算。 也可以对日期执行算术运算。 例如,假设有名为 RequiredDate 的日期/时间字段。 表达式 =[RequiredDate] - 2 返回一个日期/时间值,该值等于 RequiredDate 字段中的值之前的两天。

表达式 说明
PrimeFreight: [Freight] * 1.1 创建名为 PrimeFreight 的字段,然后在该字段中显示运费增加 10% 后的值。
OrderAmount: [Quantity] * [UnitPrice] 创建名为 OrderAmount 的字段,然后显示 Quantity 和 UnitPrice 字段中值的积。
LeadTime: [RequiredDate] - [ShippedDate] 创建名为 LeadTime 的字段,然后显示 RequiredDate 和 ShippedDate 字段中值之差。
TotalStock: [UnitsInStock]+[UnitsOnOrder] 创建名为 TotalStock 的字段,然后显示 UnitsInStock 和 UnitsOnOrder 字段中值之和。
FreightPercentage: Sum([Freight])/Sum([Subtotal]) *100 创建名为 的 FreightPercentage字段,然后显示每个小计中的运费百分比。 此表达式使用 Sum 函数对字段中的值 Freight 求和,然后将这些总计除以字段中值 Subtotal 的总和。 若要使用此表达式,请将选择查询转换为 Totals 查询。 你需要使用设计网格中的 “总计 ”行,并将此字段的 “总计 ”单元格设置为 Expression。 有关创建总计查询的详细信息,请参阅 使用查询对数据求和。 如果将 字段的 属性设置为 FormatPercent,则不包括 *100

有关如何使用聚合函数以及汇总字段和列中值的详细信息,请参阅使用查询对数据进行求和使用查询对数据进行计数使用“汇总行”在数据表中显示列汇总在数据表中显示列汇总

返回页首

查询中的日期操作

几乎所有数据库都存储和跟踪日期和时间。 将表中的日期和时间字段设置为“日期/时间”数据类型,即可在 Access 中处理日期和时间。 Access 可对日期执行算术计算,例如,可计算从发票日期起已经过的天数,以计算应收帐款的帐龄。

表达式 说明
LagTime: DateDiff("d", [OrderDate], [ShippedDate]) 创建名为 LagTime 的字段,然后使用 DateDiff 函数,显示订单日期和装运日期之间的天数。
YearHired: DatePart("yyyy",[HireDate]) 创建名为 YearHired 的字段,然后使用 DatePart 函数,显示每个员工的聘用年份。
MinusThirty: Date( )- 30 创建名为 MinusThirty 的字段,然后使用 Date 函数,显示当前日期前 30 天的日期。

返回页首

查询中的 SQL 聚合函数

下表中的表达式使用聚合或汇总数据的 SQL 函数。 通常会看到 、、 等SumCount函数,Avg称为聚合函数。

除了聚合函数,Access 还提供域聚合函数,让你有选择地对值求和或计数。 例如,可仅对特定区域内的值进行计数,或查找另一表中的值。 域聚合函数包括 DSumDCountDAvg

若要计算总计,通常需要创建 Totals 查询。 例如,若要按组汇总,请使用 Totals 查询。 若要从查询设计网格启用总计查询,请在“视图”菜单中选择“总计”。

表达式 说明
RowCount: Count(*) 创建名为 RowCount 的字段,然后使用 Count 函数计算查询中记录的数量,包括 null(空白)字段的记录。
FreightPercentage: Sum([Freight])/Sum([Subtotal]) *100 创建一个名为 FreightPercentage的字段,然后计算每个小计中的运费百分比,方法是将字段中值 Freight 的总和除以字段中值 Subtotal 的总和。 此示例使用 Sum 函数。 此表达式必须用于总计查询。 如果将 字段的 属性设置为 FormatPercent,则不包括 *100。 有关创建总计查询的详细信息,请参阅 使用查询对数据求和
AverageFreight: DAvg("[Freight]", "[Orders]") 创建名为 AverageFreight 的字段,然后使用 DAvg 函数,计算总计查询中所有订单的平均运费。

返回页首

包含缺失数据的字段

此处显示的表达式适用于可能缺少信息的字段,例如包含 null(未知或未定义)值的字段。 null 值很常见,例如新产品的未知价格或同事忘记添加到订单的值。 查找和处理 null 值的能力对数据库操作而言至关重要,下表中的表达式介绍了处理 null 值的一些常见方法。

表达式 说明
CurrentCountryRegion: IIf(IsNull([CountryRegion]), " ", [CountryRegion]) 创建名为 CurrentCountryRegion 的字段,然后使用 IIf和 IsNull 函数,在 CountryRegion 字段包含 null 值时显示空字符串;否则显示 CountryRegion 字段的内容。
LeadTime: IIf(IsNull([RequiredDate] - [ShippedDate]), "Check for a missing date", [RequiredDate] - [ShippedDate]) 创建名为 LeadTime 的字段,然后使用 IIf 和 IsNull 函数,在 RequiredDate 字段或 ShippedDate 字段中的值为 null 时显示消息“Check for a missing date”;否则显示两日期之差。
SixMonthSales: Nz([Qtr1Sales]) + Nz([Qtr2Sales]) 创建名为 SixMonthSales 的字段,首先使用 Nz 函数将任何 null 值转换为 0,然后显示 Qtr1Sales 和 Qtr2Sales 字段中值的总和。

返回页首

包含子查询的计算字段

可使用嵌套查询(也称子查询)创建计算字段。 下表中的表达式是由子查询得出计算字段的一个示例。

表达式 说明
Cat: (SELECT [CategoryName] FROM [Categories] WHERE [Products].[CategoryID]=[Categories].[CategoryID]) 创建名为 Cat 的字段,如果 Categories 表中的 CategoryID 与 Products 表中的 CategoryID 相同,则显示 CategoryName。

返回页首

匹配文本值

此表中的示例表达式演示匹配整个或部分文本值的条件。

字段 表达式 说明
ShipCity "London" 显示发往 London 的订单。
ShipCity "London" Or "Hedge End" 使用 Or 运算符显示发往伦敦或对冲端的订单。
ShipCountryRegion In("Canada", "UK") 使用 In 操作员显示发往加拿大或英国的订单。
ShipCountryRegion Not "USA" 使用 Not 操作员显示发往美国以外的国家/地区的订单。
ProductName Not Like "C*" Not使用 运算符和*通配符显示其名称不以 C 开头的产品。
CompanyName >="N" 显示发往其名称以字母 N 开头的 Z公司的订单。
ProductCode Right([ProductCode], 2)="99" 使用 Right 函数显示以 结尾 99的 ProductCode 值的订单。
ShipName Like "S*" 显示发往其名称以字母 S开头的客户的订单。

返回页首

匹配日期条件

下表中的表达式演示条件表达式中日期及相关函数的使用方法。 有关输入和使用日期值的详细信息,请参阅设置日期和时间字段的格式一文。

字段 表达式 说明
ShippedDate #2/2/2017# 显示在 2017 年 2 月 2 日发货的订单。
ShippedDate Date() 显示今天装运的订单。
RequiredDate Between Date( ) And DateAdd("m", 3, Date( )) Between...And使用 运算符以及 DateAdd 和 Date 函数显示当前日期到自今天日期起的三个月之间所需的订单。
OrderDate < Date( ) - 30 使用 Date 函数显示 30 天前的订单。
OrderDate Year([OrderDate])=2017 使用 Year 函数显示订单日期在 2017 年的订单。
OrderDate DatePart("q", [OrderDate])=4 使用 DatePart 函数显示第 4 日历季度的订单。
OrderDate DateSerial(Year ([OrderDate]), Month([OrderDate])+1, 1)-1 使用 DateSerial、Year 和 Month 函数,显示每个月最后一天的订单。
OrderDate Year([OrderDate])= Year(Now()) And Month([OrderDate])= Month(Now()) 使用 Year、Month 函数和 And 运算符,显示本年本月的订单。
ShippedDate Between #1/5/2017# And #1/10/2017# Between...And使用 运算符显示不早于 2017 年 1 月 5 日且不晚于 2017 年 1 月 10 日发货的订单。
RequiredDate Between Date( ) And DateAdd("M", 3, Date( )) Between...And使用 运算符可显示当前日期到自今天日期起的三个月之间所需的订单。
BirthDate Month([BirthDate])=Month(Date()) 使用 Month 和 Date 函数,显示本月过生日的员工。

返回页首

查找丢失的数据

下表中的表达式适用于可能缺少信息的字段,即包含 null 值或零长度字符串的字段。 null 值表示缺少信息,它不表示 0 或其他任何值。 Access 支持缺少信息,因为这一概念对于数据库的完整性至关重要。 现实中,信息的缺失很常见,即使只是暂时的(例如新产品待定的价格)。 因此,模拟业务等现实本质的数据库必须能够将信息记录为缺失。 可使用 IsNull 函数确定字段或控件是否包含 null 值,并可使用 Nz 函数将 null 值转换为 0。

字段 表达式 说明
ShipRegion Is Null 显示 ShipRegion 字段为 null(缺失)的客户的订单。
ShipRegion Is Not Null 显示 ShipRegion 字段包含值的客户的订单。
Fax "" 显示不使用传真机的客户的订单,这样的客户,其 Fax 字段中具有零长度字符串值而非 null(缺失)值。

返回页首

匹配包含 Like 的记录模式

尝试匹配遵循模式的行时,运算符 Like 提供了极大的灵活性,因为可以 Like 与通配符一起使用,并定义 Access 的匹配模式。 例如, * (星号) 通配符与任何类型的字符序列匹配,并且可以轻松查找以字母开头的所有名称。 例如,使用 表达式 Like "S*" 查找以字母 S 开头的所有名称。有关详细信息,请参阅 Like 运算符一文。

字段 表达式 说明
ShipName Like "S*" 查找 ShipName 字段中以字母 S 开头的所有记录。
ShipName Like "*Imports" 查找 ShipName 字段中以“Imports”结尾的所有记录。
ShipName Like "[A-D]*" 查找 ShipName 字段中以字母 A、B、C 或 D.开头的所有记录。
ShipName Like "*ar*" 查找 ShipName 字段中包含字母序列“ar”的所有记录。
ShipName Like "Maison Dewe?" 查找 ShipName 字段中满足以下条件的所有记录:其值的第一部分包含“Maison”,第二部分是由 5 个字母构成的字符串,该字符串前 4 个字母为“Dewe”而最后一个字母未知。
ShipName Not Like "A*" 查找 ShipName 字段中不以字母 A 开头的所有记录。

返回页首

匹配包含 SQL 聚合的行

需要选择性求和、计数和求平均值时,请使用 SQL 或域聚合函数。 例如,有时需要对特定范围内的值或计算结果为 Yes 的值进行计数。 有时又需要查找并显示另一表中的值。 下表中的示例表达式使用域聚合函数对一组值执行计算,并将结果用作查询条件。

字段 表达式 说明
Freight > (DStDev("[Freight]", "Orders") + DAvg("[Freight]", "Orders")) 使用 DStDev 和 DAvg 函数,显示运费高于运费平均值与标准偏差之和的所有订单。
Quantity > DAvg("[Quantity]", "[Order Details]") 使用 DAvg 函数,显示订购数量高于平均订购数量的产品。

返回页首

匹配包含子查询的字段

子查询也称嵌套查询,用于计算要用作条件的值。 下表中的示例表达式基于子查询返回结果匹配行。

字段 表达式 显示
UnitPrice (SELECT [UnitPrice] FROM [Products] WHERE [ProductName] = "Aniseed Syrup") 价格与 Aniseed Syrup 相等的产品。
UnitPrice >(SELECT AVG([UnitPrice]) FROM [Products]) 单价高于平均值的产品。
Salary > ALL (SELECT [Salary] FROM [Employees] WHERE ([Title] LIKE "*Manager*") OR ([Title] LIKE "*Vice President*")) 工资高于职位为“Manager”或“Vice President”的所有员工的每个销售代表的工资。
OrderTotal: [UnitPrice] * [Quantity] > (SELECT AVG([UnitPrice] * [Quantity]) FROM [Order Details]) 总计高于平均订单价值的订单。

返回页首

更新查询

使用更新查询修改数据库中一个或多个现有字段中的数据。 例如,可替换或完全删除值。 此表显示了在更新查询中使用表达式的一些方法。 在要更新的字段的查询设计网格中的行中使用这些表达式 Update To

有关创建更新查询的详细信息,请参阅创建和运行更新查询一文。

字段 表达式 结果
标题 "Salesperson" 将文本值更改为 Salesperson。
ProjectStart #8/10/17# 将日期值更改为 10-Aug-17。
停用 Yes 将 Yes/No 字段中的 No 值更改为 Yes。
PartNumber "PN" & [PartNumber] 将 PN 添加到每个指定部件号的开头。
LineItemTotal [UnitPrice] * [Quantity] 计算 UnitPrice 和 Quantity 的积。
运费 [Freight] * 1.5 将运费增加 50%。
Sales DSum("[Quantity] * [UnitPrice]", "Order Details", "[ProductID]=" & [ProductID]) 当前表中的 ProductID 值与 Order Details 表中的 ProductID 值相等时,基于 Quantity 和 UnitPrice 的积更新总销售额。
ShipPostalCode Right([ShipPostalCode], 5) 截断最左侧的字符,保留最右侧的 5 个字符。
UnitPrice Nz([UnitPrice]) 将 UnitPrice 字段中的 null(未定义或未知)值更改为零(0)。

返回页首

SQL 语句

结构化查询语言 (SQL) 是 Access 使用的查询语言。 在查询设计视图中创建的每个查询也可以使用 SQL 来表示。 若要查看任何查询的 SQL 语句,请在“视图”菜单中选择“SQL 视图”。 下表显示了使用表达式的示例 SQL 语句。

使用表达式的 SQL 语句 结果
SELECT [FirstName],[LastName] FROM [Employees] WHERE [LastName]="Danseglio"; 显示姓氏为 Danseglio 的员工所对应 FirstName 和 LastName 字段中的值。
SELECT [ProductID],[ProductName] FROM [Products] WHERE [CategoryID]=Forms![New Products]![CategoryID]; 对于 Products 中 CategoryID 值与打开的 New Products 窗体中所指定 CategoryID 值相等的记录,显示其 ProductID 和 ProductName 字段中的值。
SELECT Avg([ExtendedPrice]) AS [Average Extended Price] FROM [Order Details Extended] WHERE [ExtendedPrice]>1000; 计算 ExtendedPrice 字段中值大于 1000 的订单的延伸价格,并将结果显示在名为 Average Extended Price 的字段中。
SELECT [CategoryID], Count([ProductID]) AS [CountOfProductID] FROM [Products] GROUP BY [CategoryID] HAVING Count([ProductID])>10; 在名为 CountOfProductID 的字段中,显示包含 10 种以上产品的类别的产品总数。

返回页首

表格表达式

在表格中使用表达式的两种最常见方法是分配默认值或创建验证规则。

字段默认值

设计数据库时,最好向字段或控件分配默认值。 然后,当创建包含字段的新记录或创建包含控件的对象时,Access 将提供该值。 下表中的表达式显示了字段或控件的示例默认值。 如果控件绑定到表中的字段,并且该字段具有默认值,则控件的默认值优先。

字段 表达式 默认字段值
数量 1 1
Region "MT" MT
Region "New York, N.Y." New York, N.Y.(请注意:带标点的值必须括在引号中。)
Fax "" 零长度字符串表示在默认情况下此字段应为空,而不是包含 null 值
订单日期 Date( ) 当天的日期
DueDate Date() + 60 从当日起往后 60 天的日期

返回页首

字段验证规则

可使用表达式为字段或控件创建验证规则。 随后,Access 将在该字段或控件中有输入数据时实行该规则。 若要创建验证规则,请 ValidationRule 修改字段或控件的 属性。 还应考虑设置 ValidationText 属性,该属性保存违反验证规则时 Access 显示的文本。 如果未设置 ValidationText 属性,Access 将显示默认错误消息。

下表中的示例显示了 属性的 ValidationRule 验证规则表达式和 属性的关联文本 ValidationText

ValidationRule 属性 ValidationText 属性
<> 0 请输入非零值。
0 Or > 100 值必须为 0 或大于 100。
Like "K???" 值必须为以字母 K 开头的 4 个字符。
< #1/1/2017# 输入 2017 年 1 月 1 日前的日期。
>= #1/1/2017# And < #1/1/2008# 必须输入 2017 年的日期。

有关验证数据的详细信息,请参阅创建验证规则以验证字段中的数据一文。

返回页首

宏表达式

在某些情况下,您可能希望只有在特定条件为 True 时才执行宏内的一个操作或一系列操作。 例如,假设希望仅在“计数器”文本框的值为 10 时才运行操作。 使用表达式在 If 块中定义条件:

[Counter]=10

ValidationRule 属性一样,If 块中的表达式是条件表达式。 它必须解析为 TrueFalse。 仅当条件为 True 时才采取的操作。

使用此表达式执行操作 If
[City]="Paris" 运行该宏的窗体中 City 字段中的值为 Paris。
DCount("[OrderID]", "Orders") > 35 Orders 表的 OrderID 字段中有超过 35 个条目。
DCount("*", "[Order Details]", "[OrderID]=" & Forms![Orders]![OrderID]) > 3 Order Details 表中有超过 3 个条目的 OrderID 字段与 Orders 窗体中 OrderID 字段相等的。
[ShippedDate] Between #2-Feb-2017# And #2-Mar-2017# 运行该宏的窗体上 ShippedDate 字段中的值介于 2-Feb-2017 和 2-Mar-2017 之间。
Forms![Products]![UnitsInStock] < 5 Products 窗体上 UnitsInStock 字段中的值小于 5。
IsNull([FirstName]) 运行该宏的窗体上的 FirstName 值为 null(没有值)。 此表达式相当于 [FirstName] Is Null。
[CountryRegion]="UK" And Forms![SalesTotals]![TotalOrds] > 100 运行该宏的窗体上 CountryRegion 中的值为 UK,且 SalesTotals 窗体上 TotalOrds 字段的值大于 100。
[CountryRegion] In ("France", "Italy", "Spain") And Len([PostalCode])<>5 运行该宏的窗体上 CountryRegion 字段中的值为 France、Italy 或 Spain,且邮政编码长度不等于 5 个字符。
MsgBox("Confirm changes?",1)=1 请在 MsgBox 函数显示的对话框中单击“确定”。 如果在该对话框中单击“取消”,Access 将忽略操作。

返回页首

另请参阅