運算式的範例

套用到
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]) 若控制Region為空,則使用IIf函式顯示 和 PostalCode 控制的值City。 否則,它會顯示 、 RegionPostalCode 控制項的值City,並以空格分隔。
=[City] & (" " + [Region]) & " " & [PostalCode] 使用 + 運算子與 null 傳播來顯示 和 CityPostalCode 的值,若欄位或控制項中的 Region 值為 null 則控制。 否則,它會顯示 、 Region、 以及PostalCode欄位或控制項的值City,並以空格分隔。 零傳播意指如果表達式的任何部分為空,整個表達式也是空。 運算 + 子支援零傳播,但 & 運算子不支援。

回到頂端

頁首及頁尾

使用 Page and 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] 英國 - 1
=Format([Page], "000") 001
="Printed on: " & Date() 列印日期:12/31/17

回到頂端

算術運算

您可以利用運算式將兩個以上的欄位或控制項中的值相加、相減、相乘和相除。 您也可以使用運算式來執行日期的算術運算。 舉例來說,假設您有個日期/時間資料表的欄位,稱為 RequiredDate。 在欄位中,或綁定於欄位的控制項中,表達式 =[RequiredDate] - 2 會回傳一個日期/時間值,比 RequiredDate 欄位中當前值早兩天。

運算式 結果
=[Subtotal]+[Freight] Subtotal 和 Freight 欄位或控制項值的總和。
=[RequiredDate]-[ShippedDate] RequiredDate 和 ShippedDate 欄位或控制項兩者日期值之間相隔的天數。
=[Price]*1.06 Price 欄位或控制項值乘以 1.06 (也就是另加上 Price 值的百分之 6) 的結果。
=[Quantity]*[Price] Qantity 和 Price 欄位或控制項值相乘的結果。
=[EmployeeTotal]/[CountryRegionTotal] EmployeeTotal 欄位或控制項值除以 CountryRegionTotal 欄位或控制項值的結果。

注意

當你在一個表達式中使用算術運算子 (+-、 或 *) / ,且其中一個控制項為空時,整個表達式的結果就是空。 這稱為零傳播。 如果控制項可能有空值,你可以使用 Nz 函數將空值轉換成零,避免空值傳播。 例如,使用 =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,其第三欄的值 (請注意,0 代表第一欄,1 代表第二欄,以此類推)。
=Forms![Orders]![Orders Subform]![Price] * 1.06 在 Orders 表單中,子表單名為 Orders Subform 上的 Price 控制項值乘以 1.06 (也就是另加上 Price 控制項值的百分之 6) 的結果。
=Parent![OrderID] 目前子表單的主要或上層表單中,OrderID 控制項的值。

下表的運算式顯示報表中使用計算控制項的幾種方式。 運算式會參照 Report 屬性

運算式 結果
=Report![Invoice]![OrderID] 名為 "Invoice" 的報表中 "OrderID" 控制項的值。
=Report![Summary]![Summary Subreport]![SalesTotal] Summary 報表中,子報表名為 Summary Subreport 上的 SalesTotal 控制項的值。
=Parent![OrderID] 在目前子報表的主要或父報表中,OrderID 控制項的值。

回到頂端

計數、加總和平均值

您可以利用稱為彙總函數的這類函數來計算一或多個欄位或控制項的值。 例如,您可以計算報表中群組尾的群組總數,或是表單上明細項目的訂單小計。 您也可以計算一或多個欄位中的項目數目,或是計算平均值。

下表中的運算式說明 Avg、Count 和 Sum 等函數的幾種使用方式。

運算式 描述
=Avg([Freight]) 使用 Avg 函數顯示名為 "Freight" 的資料表欄位或控制項值的平均值。
=Count([OrderID]) 使用 Count 函數顯示 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 資料表中的 SupplierID 欄位值與 Suppliers 表單中的 SupplierID 控制項值相符時,傳回資料表中的 ContactName 欄位值。
=DLookup("[ContactName]", "[Suppliers]", "[SupplierID] = " & Forms![New Suppliers]![SupplierID]) 使用 DLookup 函數,在 Suppliers 資料表中的 SupplierID 欄位值與 New Suppliers 表單中的 SupplierID 控制項值相符時,傳回資料表中的 ContactName 欄位值。
=DSum("[OrderAmount]", "[Orders]", "[CustomerID] = 'RATTC'") 使用 DSum 函數,傳回在 Orders 資料表中 OrderAmount 欄位值的總計,其 CustomerID 為 RATTC。
=DCount("[Retired]","[Assets]","[Retired]=Yes") 使用 DCount 函數傳回 Assets 資料表中 Retired 欄位 (Yes/No 欄位) 為 Yes 值的數目。

回到頂端

日期運算

追蹤日期和時間是基本的資料庫活動。 例如,您可計算目前距離發票日期已過幾天,藉此追蹤應收帳款的時間。 如下表所示,有多種日期和時間格式可供您採用。

運算式 描述
=Date() 使用日期功能顯示當前日期 mm-dd-yy,形式為 ,其中 mm 是) (1 至 12 月份, dd 是) (1 至 31 日, (yy 1980 至 2099) 年份的最後兩位數字。
=Format(Now(), "ww") 使用格式功能顯示當前日期的年度週數,其中 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 函數傳遞三個參數:第一個參數是一個必須回傳 True or False 值的表達式。 第二個引數是運算式若為 True 要傳回的值;第三個引數則是運算式若為 False 要傳回的值。

運算式 描述
=IIf([Confirmed] = "Yes", "Order Confirmed", "Order Not Confirmed") 使用 IIf (立即 If) 函式,若確認控制值為 時 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 時顯示「檢查是否缺少日期」訊息;否則顯示 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 欄位值第二個字元開始的三個字元。
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 各值的總和。 使用此表達式時,將你所選查詢轉換為總計查詢。 你需要在設計網格中使用 Total 列,並將此欄位的 Total 格設為 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 查詢,請在檢視選單中選擇 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 時,顯示「檢查是否缺少日期」訊息;否則顯示相差的日期。
SixMonthSales: Nz([Qtr1Sales]) + Nz([Qtr2Sales]) 建立名為 SixMonthSales 的欄位,先使用 Nz 函數將所有 Null 值轉換為零,然後再顯示 Qtr1Sales 和 Qtr2Sales 欄位值的總計。

回到頂端

使用子查詢來導出欄位

您可以使用巢狀查詢 (也稱為子查詢) 來建立導出欄位。 下表中的運算式示範從子查詢結果取得的導出欄位。

運算式 描述
Cat: (SELECT [CategoryName] FROM [Categories] WHERE [Products].[CategoryID]=[Categories].[CategoryID]) 建立名為 Cat 的欄位,在 Categories 資料表中的 CategoryID 與 Products 資料表中的 CategoryID 相同時顯示 CategoryName。

回到頂端

比對文字值

本表中的範例運算式示範比對全部或部分文字值的準則。

欄位 運算式 描述
ShipCity "London" 顯示出貨至倫敦的訂單。
ShipCity "London" Or "Hedge End" 使用操作員 Or 顯示寄往倫敦或 Hedge End 的訂單。
ShipCountryRegion In("Canada", "UK") 使用操作員 In 顯示寄往加拿大或英國的訂單。
ShipCountryRegion Not "USA" 使用營運商 Not 顯示寄往美國以外國家/地區的訂單。
ProductName Not Like "C*" 使用 Not 運算子和 * 萬用字元來顯示名稱不以 C 開頭的產品。
CompanyName >="N" 顯示訂單寄給名稱以字母NZ開頭的公司。
ProductCode Right([ProductCode], 2)="99" 使用 Right 函數顯示以 ProductCode 結尾 99的訂單。
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 函數顯示第四季的訂單。
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 值代表遺漏的資訊,並不代表零或任何值。 對資料庫的完整度而言,資訊遺漏是相當重要的概念,因此 Access 在產品設計中支援這個邏輯。 在真實世界中,資訊遺漏的情形層出不窮,即使只是暫時性的闕漏也是屢見不鮮 (像是新產品的價格未定)。 因此以真實世界實體 (例如業務) 為原型的資料庫也必須要能記錄遺漏的資訊。 您可以使用 IsNull 函數來判斷欄位或控制項是否包含 Null 值,然後使用 Nz 函數將 Null 值轉換為零。

欄位 運算式 描述
ShipRegion Is Null 顯示客戶 ShipRegion 欄位是 Null (遺漏) 值的訂單。
ShipRegion Is Not Null 顯示客戶 ShipRegion 欄位含有值的訂單。
Fax "" 顯示沒有傳真機的客戶訂單,並以零長度字串值在 Fax 欄位中顯示,而非使用 Null (遺漏) 值。

回到頂端

使用 Like 比對記錄模式

當你想匹配符合模式的列時,這個 Like 運算子提供了極大的彈性,因為你可以用 Like 萬用字元來定義 Access 的模式來匹配。 例如, * (星號) 萬用字元可匹配任意類型的字元序列,方便找到所有以字母開頭的名字。 例如,你用這個表達 Like "S*" 式來尋找所有以字母 S 開頭的名字。欲了解更多資訊,請參閱 「Like Operator」一文。

欄位 運算式 描述
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") 價格和茴芹糖漿價格相同的產品。
UnitPrice >(SELECT AVG([UnitPrice]) FROM [Products]) 單價高於平均值的產品。
Salary > ALL (SELECT [Salary] FROM [Employees] WHERE ([Title] LIKE "*Manager*") OR ([Title] LIKE "*Vice President*")) 薪水高於所有職稱為「經理」或「副總裁」的每個業務代表的薪水。
OrderTotal: [UnitPrice] * [Quantity] > (SELECT AVG([UnitPrice] * [Quantity]) FROM [Order Details]) 總金額高於平均訂單價值的訂單。

回到頂端

更新查詢

使用更新查詢修改資料庫中一個或多個現有欄位的資料。 例如,您可以整個取代或刪除所有相符的值。 此表展示了在更新查詢中使用表達式的一些方法。 在查詢設計網格中,針對你想更新的欄位,使用這些表達 Update To 式。

如需有關建立更新查詢的詳細資訊,請參閱建立和執行更新查詢 (機器翻譯) 一文。

欄位 運算式 結果
標題 "Salesperson" 將文字值變更為銷售人員。
ProjectStart #8/10/17# 將日期值變更為 2017 年 8 月 10 日。
已停用 Yes 將 Yes/No 欄位從 No 值變更為 Yes。
PartNumber "PN" & [PartNumber] 在每個指定的零件編號開頭加上 PN。
LineItemTotal [UnitPrice] * [Quantity] 計算 UnitPrice 和 Quantity 相乘的結果。
Freight [Freight] * 1.5 增加百分之 50 的運費。
銷售 DSum("[Quantity] * [UnitPrice]", "Order Details", "[ProductID]=" & [ProductID]) 若目前資料表中的 ProductID 值與訂單詳細資料資料表中的 ProductID 值相符,就根據 Quantity 和 UnitPrice 相乘的結果更新銷售總額。
ShipPostalCode Right([ShipPostalCode], 5) 截斷最左邊的字元,保留最後 5 個字元。
UnitPrice Nz([UnitPrice]) 在 UnitPrice 欄位中將 Null (未定義或未知) 值變更為零 (0)。

回到頂端

SQL 陳述式

結構化查詢語言 (SQL) (SQL) 是 Access 使用的查詢語言。 你在查詢設計檢視中建立的每一個查詢,也可以用 SQL 來表達。 若要查看任何查詢的 SQL 陳述式,請在檢視選單中選擇 SQL 檢視。 下表展示了使用表達式的 SQL 範例語句。

使用運算式的 SQL 陳述式 結果
SELECT [FirstName],[LastName] FROM [Employees] WHERE [LastName]="Danseglio"; 針對姓氏為「鐘」的員工顯示其 FirstName 欄位和 LastName 欄位中的值。
SELECT [ProductID],[ProductName] FROM [Products] WHERE [CategoryID]=Forms![New Products]![CategoryID]; 若記錄中的 CategoryID 值與開啟的 New Products 表單中特定的 CategoryID 值相符,就顯示 Products 資料表中 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 會提供該值。 下表中的表達式顯示欄位或控制項的範例預設值。 若控制項綁定在資料表中的欄位且該欄位有預設值,則該控制項的預設值優先。

欄位 運算式 預設欄位值
Quantity 1 1
Region "MT" MT
Region "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 開頭的四個字元。
< #1/1/2017# 輸入的日期必須早於 2017 年 1 月 1 日。
>= #1/1/2017# And < #1/1/2008# 日期必須在 2017 年內。

如需驗證資料的詳細資訊,請參閱建立驗證規則以驗證欄位中的資料一文。

回到頂端

巨集運算式

在某些情況下,建議您只在特定條件成立時,才執行巨集中的某個巨集指令或一連串巨集指令。 舉例來說,假設您只想在 Counter 文字方塊為 10 時才執行某個指令。 你用一個表達式來定義 If 區塊中的條件:

[Counter]=10

與性質 ValidationRule 相同,If 區塊中的表達式是條件表達式。 它必須解析為 TrueFalse。 只有當條件為 True 時,系統才會執行指令。

使用這個運算式來執行指令 If
[City]="Paris" 若表單欄位中的 City 值為巴黎,系統就會執行巨集。
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] 欄位的值介於 2017 年 2 月 2 日和 2017 年 3 月 2 日之間時,系統就會執行巨集。
Forms![Products]![UnitsInStock] < 5 Products 表單上的 [UnitsInStock] 欄位值小於 5。
IsNull([FirstName]) 若表單上的 FirstName 值為 Null (沒有值) 時,系統就會執行巨集。 也就是說,此運算式的作用等同於 [FirstName] 為 Null。
[CountryRegion]="UK" And Forms![SalesTotals]![TotalOrds] > 100 若表單上 CountryRegion 欄位值為英國,且 SalesTotals 表單上的 TotalOrds 欄位值大於 100 時,系統就會執行巨集。
[CountryRegion] In ("France", "Italy", "Spain") And Len([PostalCode])<>5 若表單上 CountryRegion 欄位值為法國、義大利或西班牙,且郵遞區號長度不是 5 個字元時,系統就會執行巨集。
MsgBox("Confirm changes?",1)=1 若您在 MsgBox 函數所顯示的對話方塊中按一下 [確定]。 若您在對話方塊中按一下 [取消],Access 就會略過指令。

回到頂端

另請參閱