運算式的範例

本文提供 Access 運算式的範例。運算式是數學或邏輯運算子、常數、函數、資料表欄位、控制項和屬性的組合,用來估算出單一數值。您可以在 Access 中使用運算式來計算數值、驗證資料,及針對某個欄位或控制項設定預設值。

附註: 本文僅提供建立運算式的基本步驟,並非提供使用 Access 工具建立運算式的全方位指南。如需有關建立運算式的詳細資訊,請參閱建立運算式一文。

本文內容

了解運算式

表單和報表中所用運算式的範例

查詢和篩選中所用運算式的範例

預設值運算式的範例

欄位驗證規則運算式的範例

巨集條件運算式的範例

了解運算式

在 Access 中,「運算式」即是「公式」的同義字。運算式包含數個您可單獨或合併使用以產生結果的元素。這些元素包括︰

  • 識別碼 — 表單或報表的資料表欄位或控制項的名稱,或是這類欄位或控制項的屬性

  • 運算子,例如 + (加號) 或 - (減號)

  • 函數,例如 SUMAVG

  • 常數 — 即不會變更的值,例如運算式不會計算的文字字串或數字。

使用運算式有多種方式,像是執行計算、擷取控制項的值,或是為查詢提供準則等等。

如需運算式使用方式和使用條件的詳細資訊,請參閱建立運算式一文。

頁面頂端

表單和報表中所用運算式的範例

本節中的表格提供運算式如何計算表單或報表中控制項之值的範例。若要建立計算控制項,請在控制項的 ControlSource 屬性 (而非資料表欄位或查詢) 中輸入運算式。

下列步驟說明如何在現有表單或報表上的文字方塊控制項中輸入運算式。

建立計算控制項

  1. 在 [功能窗格] 中,以滑鼠右鍵按一下要變更的表單或報表,然後按一下捷徑功能表上的 [設計檢視] 按鈕影像

  2. 在表單或報表上,以滑鼠右鍵按一下您要變更的文字方塊控制項 (不是與文字方塊關聯的標籤),然後按一下捷徑功能表上的 [屬性]。

  3. 如有需要,請按一下 [全部] 索引標籤或 [資料] 索引標籤。這兩個索引標籤提供了 [控制項資料來源] 屬性。

  4. 按一下 [控制項資料來源] 屬性旁的方塊,然後輸入您的運算式。例如,您可以複製並貼上下節表格中「運算式」欄內的運算式。

  5. 關閉屬性表。

合併或操縱文字的運算式

下表中的運算式使用了 &+ (加號) 運算子來合併文字字串和內建函數,以操縱文字字串,或是按文字運作以建立計算控制項。

運算式

結果

="N/A"

會顯示 N/A。

=[FirstName] & " " & [LastName]

會顯示位於 FirstName 和 LastName 資料表欄位內的值。在此範例中,& 運算子用來合併 FirstName 欄位、空白字元 (以引號括住) 及 LastName 欄位。

=Left([ProductName], 1)

使用 Left 函數顯示 ProductName 欄位或控制項值的第一個字元。

=Right([AssetCode], 2)

使用 Right 函數顯示 AssetCode 欄位或控制項值的最後 2 個字元。

=Trim([Address])

使用 Trim 函數顯示移除任何前置或後置空格的 Address 控制項值。

=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode])

如果 Region 控制項中的值為 Null,使用 IIf 函數顯示 City 和 PostalCode 控制項的值;否則,則顯示 City、Region 和 PostalCode 控制項的值 (以空格分隔)。

=[City] & (" " + [Region]) & " " & [PostalCode]

如果 Region 欄位或控制項中的值為 Null,使用 + 運算子和 Null 傳播顯示 City 和 PostalCode 控制項的值;否則,則顯示 City、Region 和 PostalCode 欄位或控制項的值 (以空格分隔)。

Null 傳播表示運算式中如有任何元件為 Null,則整個運算式也為 Null。+ 運算子支援 Null 傳播;& 運算子則否。

頁首和頁尾中的運算式

您可以使用 PagePages 屬性顯示或列印表單或報表中的頁碼。PagePages 屬性只能於列印期間或預覽列印時使用,因此不會出現在表單或報表中的屬性表內。一般來說,使用這類屬性的方式,是在表單或報表的頁首或頁尾區段中放置文字方塊,然後再使用運算式 (如下表所示)。

如需有關如何在表單和報表中使用頁首和頁尾的詳細資訊,請參閱表單或報表中插入頁碼一文。

運算式

範例結果

=[Page]

1

="第 " & [Page] & " 頁"

第 1 頁

="頁 " & [Page] & " / " & [Pages]

頁 1 / 3

="第 " & [Page] & " 頁,共 " & [Pages] & " 頁"

第 1 頁,共 3 頁

=[Page] & "/" & [Pages] & " 頁"

1/3 頁

=[Country/region] & " - " & [Page]

英國 - 1

=Format([Page], "000")

001

="列印日期:" & Date()

列印日期:12/31/07

可執行算術運算的運算式

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

運算式

結果

=[Subtotal]+[Freight]

Subtotal 和 Freight 欄位或控制項值的總和。

=[RequiredDate]-[ShippedDate]

RequireDate 和 ShippedDate 欄位或控制項兩者日期值之間相隔的天數。

=[Price]*1.06

Price 欄位或控制項值乘以 1.06 (也就是另加上 Price 值的百分之 6) 的結果。

=[Quantity]*[Price]

Qantity 和 Price 欄位或控制項值相乘的結果。

=[EmployeeTotal]/[CountryRegionTotal]

EmployeeTotal 欄位或控制項值除以 CountryRegionTotal 欄位或控制項值的結果。

附註: 在運算式中使用算術運算子 (+-*/) 時,若運算式內其中一個控制項的值為 Null,則整個運算式的結果即為 Null — 此原則稱為 Null 傳播。如果您用於運算式的某個控制項記錄可能含有 Null 值,可使用 Nz 函數將 Null 值轉換為零,藉此避免 Null 傳播情形發生 — 例如 =Nz([Subtotal])+Nz([Freight])

如需有關函數的詳細資訊,請參閱 Nz 函數一文。

可參照其他欄位或控制項值的運算式

有時候,您會需要存在其他資源中的值,例如存在另一份表單或報表的欄位或控制項中的值。這時您可以使用運算式來傳回其他欄位或控制項的值。

下表列出您可用於表單上計算控制項的運算式範例。

運算式

結果

=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 屬性一文。

運算式

結果

=Report![Invoice]![OrderID]

名為 "Invoice" 的報表中 "OrderID" 控制項的值。

=Report![Summary]![Summary Subreport]![SalesTotal]

Summary 報表中,子報表名為 Summary Subreport 上的 SalesTotal 控制項的值。

=Parent![OrderID]

在目前子報表的主要或父報表中,OrderID 控制項的值。

計數、加總和計算平均值的運算式

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

下表中的運算式說明 AvgCountSum 等函數的幾種使用方式。

運算式

描述

=Avg([Freight])

使用 Avg 函數顯示名為 "Freight" 的資料表欄位或控制項值的平均值。

=Count([OrderID])

使用 Count 函數顯示 OrderID 控制項中記錄的數目。

=Sum([Sales])

使用 Sum 函數顯示 Sales 控制項值的加總。

=Sum([Quantity]*[Price])

使用 Sum 函數顯示 Quantity 和 Price 控制項值相乘的加總。

=[Sales]/Sum([Sales])*100

顯示銷售額所佔的百分比,由 Sales 控制項值除以 Sales 控制項所有值的加總。

附註: 如果您將控制項的 Format 屬性設為 Percent,則請勿將 *100 納入運算式中。

如需關於使用彙總函數和加總欄位和資料行中之值的詳細資訊,請參閱使用查詢加總資料使用查詢計算資料計算資料工作表中的資料列數以及顯示資料工作表中的資料行總數這幾篇文章。

使用範圍彙總函數進行選擇性計算、加總和查詢值的運算式

若需選擇性加總或計算值,您可以使用範圍彙總函數這類函數。「範圍」包括一或多個資料表中的一或多個欄位,或是一或多個表單或報表中的一或多個控制項。例如,您可以藉此比對資料表欄位值和表單控制項值。

運算式

描述

=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 函數,在 CustomerID 為 Rattc 時傳回在 Orders 資料表中 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 函數顯示 PrmisedDate 控制項值 10 天前的日期。

=DateDiff("d", [OrderDate], [ShippedDate])

使用 DateDiff 函數顯示 OrderDate 和 ShippedDate 控制項值之間相隔的天數。

=[InvoiceDate] + 30

使用日期的算術運算來計算 InvoiceDate 欄位或控制項中日期過後的第 30 天。

傳回可能值 (二擇一) 的條件運算式

下表中的範例運算式使用 IIf 函數來傳回可能的值 (二擇一)。您傳遞三個引數給 IIf 函數:第一個引數是必須傳回 TrueFalse 值的運算式;第二個引數是運算式若為 True 要傳回的值;第三個引數則是運算式若為 False 要傳回的值。

運算式

描述

=IIf([Confirmed] = "是", "訂單已確認", "訂單未確認")

使用 IIf (Immediate If) 函數,在 Confirmed 控制項的值為「是」時,顯示「訂單已確認」訊息;否則,則顯示「訂單未確認」訊息。

=IIf(IsNull([Country/region]), " ", [Country])

使用 IIfIsNull 函數,在 Country/region 控制項值為 Null 時顯示空字串;否則,則顯示 Country/region 控制項的值。

=IIf(IsNull([Region]), [City] & " " & [PostalCode], [City] & " " & [Region] & " " & [PostalCode])

使用 IIfIsNull 函數,在 Region 控制項值為 Null 時顯示 City 和 PostalCode 控制項的值;否則,則顯示 City、Region 和 PostalCode 欄位或控制項的值。

=IIf(IsNull([RequiredDate]) Or IsNull([ShippedDate]), "檢查是否缺少日期", [RequiredDate] - [ShippedDate])

使用 IIfIsNull 函數,在 RequiredDate 扣除 ShippedDate 的結果為 Null 時顯示「檢查是否缺少日期」訊息;否則,則顯示 RequiredDate 和 ShippedDate 兩個控制項日期值之間相隔的時間。

頁面頂端

查詢和篩選中所用運算式的範例

本節提供您可用來在查詢中建立導出欄位或為查詢提供準則的運算式範例。導出欄位為查詢中的資料行,其內容為運算式結果。舉例來說,您可以計算值、合併文字值 (例如姓氏與名字),或設定日期部分的格式。

您可以在查詢中使用準則來限制您處理的記錄。例如,您可以使用 Between 運算子來提供開始和結束日期,將查詢結果限制在這兩個日期之間所出貨的訂單。

下列各節說明如何在查詢中新增導出欄位,以查詢和提供查詢中可用的運算式範例。

在查詢的 [設計檢視] 中新增導出欄位

  1. 在 [瀏覽窗格] 中,以滑鼠右鍵按一下要變更的查詢,然後按一下捷徑功能表上的 [設計檢視]。

  2. 在您要建立導出欄位的資料行中按一下 [欄位] 儲存格。您可以輸入欄位名稱並在後面加上冒號,或輸入您的運算式。如果您未輸入名稱,Access 會加入 Exprn:,其中 n 為序號。

  3. 輸入您的運算式。

    -或者-

    在 [設計] 索引標籤上的 [查詢設定] 群組中,按一下 [建立器] 以啟動 [運算式建立器]。

    如需有關如何使用 [運算式建立器] 的詳細資訊,請參閱建立運算式一文。

操縱查詢或篩選中文字的運算式

下表中的運算式使用 &+ 運算子來合併文字字串、使用內建函數來按文字字串執行,或是按文字執行來建立導出欄位。

運算式

描述

FullName: [FirstName] & " " & [LastName]

建立名為 FullName 的欄位來顯示 FirstName 和 LastName 欄位中的值 (以空格分隔)。

Address2: [City] & " " & [Region] & " " & [PostalCode]

建立名為 Address2 的欄位來顯示 City、Region 和 PostalCode 欄位中的值 (以空格分隔)。

ProductInitial:Left([ProductName], 1)

建立名為 ProductInitial 的欄位,然後使用 Left 函數在 ProductInitial 欄位中顯示 ProductNate 欄位值的第一個字元。

TypeCode:Right([AssetCode], 2)

建立名為 TypeCode 的欄位,然後使用 Right 函數顯示 AssetCode 欄位值的最後兩個字元。

AreaCode:Mid([Phone],2,3)

建立名為 AreaCode 的欄位,然後使用 Mid 函數顯示 Phone 欄位值第二個字元開始的三個字元。

在導出欄位中執行算術運算的運算式

您可以利用運算式將兩個以上的欄位或控制項中的值相加、相減、相乘和相除。您也可以執行日期的算術運算。舉例來說,假設您有個日期/時間欄位,稱為 RequiredDate。運算式 =[RequiredDate] - 2 傳回的日期/時間值等於 RequiredDate 欄位中目前值的 2 天前。

運算式

描述

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 欄位值的總和。

使用這個運算式會使用到設計格線中的 [合計] 資料列,因此您必須將所選查詢轉換成合計查詢,同時也必須為這個欄位將 [合計] 儲存格設為運算式

如需有關如何建立合計查詢的詳細資訊,請參閱使用查詢加總資料一文。

如果您將欄位的 Format 屬性設為 Percent,則請勿將 *100 納入運算式中。

如需關於使用彙總函數和加總欄位和資料行中之值的詳細資訊,請參閱使用查詢加總資料使用查詢計算資料計算資料工作表中的資料列數以及顯示資料工作表中的資料行總數這幾篇文章。

操縱及計算導出欄位中日期的運算式

幾乎所有的資料庫都可以儲存及追蹤日期和時間。將資料表中的日期和時間欄位設為日期/時間資料類型,即可在 Access 中處理日期和時間。Access 可以執行日期的算術計算;例如,您可計算目前距離發票日期已過幾天,藉此追蹤應收帳款的時間。

運算式

描述

LagTime:DateDiff("d", [OrderDate], [ShippedDate])

建立名為 LagTime 的欄位,然後使用 DateDiff 函數顯示訂單日期和出貨日期相隔的天數。

YearHired:DatePart("yyyy",[HireDate])

建立名為 YearHired 的欄位,然後使用 DatePart 函數顯示每位員工的到職年份。

MinusThirty:Date( )- 30

建立名為 MinusThirty 的欄位,然後使用 Date 函數顯示目前日期 30 天前的日期。

使用 SQL 彙總函數或範圍彙總函數進行計數、加總和計算平均值的運算式

下表中的運算式使用了 SQL (結構化查詢語言) 函數來彙總或合計資料。這類函數通常稱為彙總函數 (例如 SumCountAvg)。

除了彙總函數,Access 也提供「範圍」彙總函數供您用來選擇性加總或計算值。例如,您可以只計算特定範圍內的值,或查詢其他資料表的值。範圍彙總函數集包含 DSum FunctionDCount FunctionDAvg Function

若要計算總計,您通常需要建立合計查詢。例如,若要依群組合計,您必須使用合計查詢。若要從查詢設計格線啟用合計查詢,請按一下 [檢視] 功能表上的 [合計]。

運算式

描述

RowCount:Count(*)

建立名為 RowCount 的欄位,然後使用 Count 函數計算查詢中的記錄數目,包含具有 Null (空白) 欄位的記錄在內。

FreightPercentage:Sum([Freight])/Sum([Subtotal]) *100

建立名為 FreightPercentage 的欄位,然後將 Freight 欄位值的總計除以 Subtotal 欄位值的總計,以計算運費在每個小計中所佔的百分比 (此範例使用 Sum 函數)。

附註: 您必須搭配合計查詢來使用這個運算式。如果您將欄位的 Format 屬性設為 Percent,則請勿將 *100 納入運算式中。

如需有關如何建立合計查詢的詳細資訊,請參閱使用查詢加總資料一文。

AverageFreight:DAvg("[Freight]", "[Orders]")

建立名為 AverageFreight 的欄位,然後使用 DAvg 函數來計算合併於合計查詢中所有訂單的平均運費。

處理遺漏資訊 (欄位為 Null 值) 之欄位的運算式

此處顯示的運算式處理可能遺漏資訊的欄位,例如包含 Null (未知或未定義) 值的欄位。您常會碰到 Null 值,像是新產品價格未知,或是同事忘記在訂單中加入值時,就會遇到這種情況。找出並處理 Null 值是資料庫運作的重要環節,下表中的運算式將示範處理 Null 值的幾種常見方式。

運算式

描述

CurrentCountryRegion:IIf(IsNull([CountryRegion]), " ", [CountryRegion])

建立名為 CurrentCountryRegion 的欄位,然後使用 IIfIsNull 函數,在 CountryRegion 欄位包含 Null 值時,於該欄位中顯示空字串;否則,則顯示 CountryRegion 欄位的內容。

LeadTime:IIf(IsNull([RequiredDate] - [ShippedDate]), "Check for a missing date", [RequiredDate] - [ShippedDate])

建立名為 LeadTime 的欄位,然後使用 IIfIsNull 函數,在 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。

定義準則並限制結果集記錄的運算式

您可以使用運算式來定義查詢準則。Access 會傳回只與準則相符的列。本節所述的步驟提供為查詢新增準則的基本資訊,而本節中的表格則提供比對文字和日期值的準則範例。

為查詢新增準則

  1. 在 [瀏覽窗格] 中,以滑鼠右鍵按一下要變更的查詢,然後按一下捷徑功能表上的 [設計檢視] 按鈕影像

  2. 在設計格線的 [準則] 列中,在您想要使用的欄中按一下儲存格,然後輸入準則。

    如果您想使用更大的空間來輸入運算式,請按 SHIFT+F2 來顯示 [縮放控制] 方塊。

    -或者-

    在 [設計] 索引標籤上的 [查詢設定] 群組中,按一下 [建立器] 按鈕影像 以啟動 [運算式建立器],然後建立您的運算式。

附註: 在建立定義準則的運算式時,請勿在運算式前面加上 = 運算子。

如需有關如何使用 [運算式建立器] 的詳細資訊,請參閱建立運算式一文。

比對全部或部分文字值的運算式

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

欄位

運算式

描述

ShipCity

"倫敦"

顯示出貨至倫敦的訂單。

ShipCity

"倫敦" Or "赫奇恩德"

使用 Or 運算子顯示出貨至倫敦或赫奇恩德的訂單。

ShipCountryRegion

In("加拿大", "英國")

使用 IN 運算子顯示出貨至加拿大或英國的訂單。

ShipCountryRegion

Not "美國"

使用 Not 運算子顯示出貨至美國以外之國家/地區的訂單。

ProductName

Not Like "C*"

使用 Not 運算子和 * 萬用字元來顯示名稱開頭不是 C 的產品。

CompanyName

>="N"

顯示名稱的字母開頭介於 N 到 Z 的訂單收件公司。

ProductCode

Right([ProductCode], 2)="99"

使用 Right 函數顯示 ProductCode 值結尾為 99 的訂單。

ShipName

Like "S*"

顯示名稱的字母開頭為 S 的訂單收件客戶。

使用日期的運算式

下表中的運算式示範如何在準則運算式中使用日期和相關函數。

如需有關輸入及使用日期值的詳細資訊,請參閱輸入日期或時間值一文。如需如何使用這些範例運算式函數的相關資訊,請按一下下列多個函數主題的連結。

欄位

運算式

描述

ShippedDate

#2/2/2007#

顯示 2007 年 2 月 2 日出貨的訂單。

ShippedDate

Date()

顯示今天出貨的訂單。

RequiredDate

Between Date( ) And DateAdd("m", 3, Date( ))

使用 Between...And 運算子和 DateAdd 以及 Date 函數顯示今天起三個月內要出貨的訂單。

OrderDate

< Date( ) - 30

使用 Date 函數顯示超過 30 天前的訂單。

OrderDate

Year([OrderDate])=2007

使用 Year 函數顯示訂單日期為 2007 年的訂單。

OrderDate

DatePart("q", [OrderDate])=4

使用 DatePart 函數顯示第四季的訂單。

OrderDate

DateSerial(Year ([OrderDate]), Month([OrderDate])+1, 1)-1

使用 DateSerialYearMonth 函數顯示每個月最後一天的訂單。

OrderDate

Year([OrderDate])= Year(Now()) And Month([OrderDate])= Month(Now())

使用 YearMonth 函數及 And 運算子顯示今年度本月份的訂單。

ShippedDate

Between #1/5/2007# And #1/10/2007#

使用 Between...And 運算子顯示介於 2007 年 1 月 5 日和 2007 年 1 月 10 日之間出貨的訂單。

RequiredDate

Between Date( ) And DateAdd("M", 3, Date( ))

使用 Between...And 運算子顯示今天起三個月內要出貨的訂單。

BirthDate

Month([BirthDate])=Month(Date())

使用 MonthDate 函數顯示本月生日的員工。

比對遺漏值 (Null) 或零長度字串的運算式

下表中的運算式處理可能遺漏資訊的欄位,這類欄位可能包含 Null 值或零長度字串。Null 值代表遺漏的資訊,並不代表零或任何值。對資料庫的完整度而言,資訊遺漏是相當重要的概念,因此 Access 在產品設計中支援這個邏輯。在真實世界中,資訊遺漏的情形層出不窮,即使只是暫時性的闕漏也是屢見不鮮 (像是新產品的價格未定)。因此以真實世界實體 (例如業務) 為原型的資料庫也必須要能記錄遺漏的資訊。您可以使用 IsNull 函數來判斷欄位或控制項是否包含 Null 值,然後使用 Nz 函數將 Null 值轉換為零。

欄位

運算式

描述

ShipRegion

Is Null

顯示客戶 ShipRegion 欄位是 Null (遺漏) 值的訂單。

ShipRegion

Is Not Null

顯示客戶 ShipRegion 欄位含有值的訂單。

Fax

""

顯示沒有傳真機的客戶訂單,並以零長度字串值在 Fax 欄位中顯示,而非使用 Null (遺漏) 值。

使用模式來比對記錄的運算式

當您試著比對遵循模式的資料列時,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 開頭的所有記錄。

根據範圍彙總函數結果來比對資料列的運算式

若需選擇性加總、計數或計算平均值,您可以使用範圍彙總函數。例如,若您只需計算落入特定範圍內的值,或結果評估為 Yes 的值,就能使用這類運算式。有時候,您可能需要先查詢其他資料表的值,才能顯示該值。下表中的範例運算式利用範圍彙總函數來執行一組值的計算,再以此結果做為查詢準則。

欄位

運算式

描述

Freight

> (DStDev("[Freight]", "Orders") + DAvg("[Freight]", "Orders"))

使用 DStDevDAvg 函數顯示超過平均運費的所有訂單,以及運費的標準差。

Quantity

> DAvg("[Quantity]", "[Order Details]")

使用 DAvg 函數顯示訂購數量超過平均訂購數量的產品。

根據子查詢結果進行比對的運算式

您可以使用子查詢 (又稱為巢狀查詢) 來計算值並做為準則使用。下表中的範例運算式會根據子查詢所傳回的結果來比對資料列。

欄位

運算式

顯示

UnitPrice

(SELECT [UnitPrice] FROM [Products] WHERE [ProductName] = "茴芹糖漿")

價格和茴芹糖漿價格相同的產品。

UnitPrice

>(SELECT AVG([UnitPrice]) FROM [Products])

單價高於平均值的產品。

Salary

> ALL (SELECT [Salary] FROM [Employees] WHERE ([Title] LIKE "*經理*") OR ([Title] LIKE "*副總裁*"))

薪水高於所有職稱為「經理」或「副總裁」的每個業務代表的薪水。

OrderTotal: [UnitPrice] * [Quantity]

> (SELECT AVG([UnitPrice] * [Quantity]) FROM [Order Details])

總金額高於平均訂單價值的訂單。

用於更新查詢中的運算式

您可以使用更新查詢來修改資料庫中一或多個現有欄位中的資料。例如,您可以整個取代或刪除所有相符的值。此表格會示範在更新查詢中使用運算式的幾種方式。您可以在查詢設計格線中的 [更新至] 資料列中,針對您要更新的欄位使用下列運算式。

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

欄位

運算式

結果

Title

"銷售人員"

將文字值變更為銷售人員。

ProjectStart

#8/10/07#

將日期值變更為 2007 年 8 月 10 日。

Retired

Yes

將 Yes/No 欄位從 No 值變更為 Yes。

PartNumber

"PN" & [PartNumber]

在每個指定的零件編號開頭加上 PN。

LineItemTotal

[UnitPrice] * [Quantity]

計算 UnitPrice 和 Quantity 相乘的結果。

Freight

[Freight] * 1.5

增加百分之 50 的運費。

Sales

DSum("[Quantity] * [UnitPrice]",
"訂單詳細資料", "[ProductID]=" & [ProductID])

若目前資料表中的 ProductID 值與訂單詳細資料資料表中的 ProductID 值相符,就根據 Quantity 和 UnitPrice 相乘的結果更新銷售總額。

ShipPostalCode

Right([ShipPostalCode], 5)

截斷最左邊的字元,保留最後 5 個字元。

UnitPrice

Nz([UnitPrice])

在 UnitPrice 欄位中將 Null (未定義或未知) 值變更為零 (0)。

在 SQL 陳述式中所用的運算式

Access 的查詢語言採用結構化查詢語言 (SQL)。您在查詢設計檢視中建立的任何查詢,都能以 SQL 表達。若要查看任何查詢的 SQL 陳述式,請按一下 [檢視] 功能表上的 [SQL 檢視]。下表說明使用運算式的範例 SQL 陳述式。

使用運算式的 SQL 陳述式

結果

SELECT [FirstName],[LastName] FROM [Employees] WHERE [LastName]="鐘"

針對姓氏為「鐘」的員工顯示其 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 之後就會在新記錄包含已建立欄位、或物件包含已建立控制項時提供預設值。下表中的運算式代表欄位或控制項的預設值範例。

為資料表欄位新增預設值

  1. 在 [瀏覽窗格] 中,以滑鼠右鍵按一下要變更的資料表,然後按一下捷徑功能表上的 [設計檢視]。

  2. 按一下您要變更的欄位,再按一下 [一般] 索引標籤上的 [預設值] 屬性方塊。

  3. 輸入運算式,或按一下屬性方塊旁右邊的 [建立] 按鈕 [建立器] 按鈕 ,以使用 [運算式建立器] 來建立運算式。

如果控制項與資料表欄位相連,且欄位具有預設值,則會優先使用控制項的預設值。

欄位

運算式

預設欄位值

Quantity

1

1

Region

"MT"

MT

Region

"紐約, 紐約州"

紐約, 紐約州 (請注意,若值含有標點符號,就必須以引號括住)。

Fax

""

根據預設,零長度字串代表欄位是空白而非 Null 值。

Order Date

Date( )

今天的日期

DueDate

Date() + 60

今天以後第 60 天的日期

頁面頂端

欄位驗證規則運算式的範例

您可以使用運算式為欄位或控制項建立驗證規則。Access 會在資料輸入到欄位或控制項時強制執行這項規則。若要建立驗證規則,請修改欄位或控制項的 ValidationRule 屬性。您也可以考慮設定 ValidationText 屬性,所設定的屬性文字會供 Access 在違反驗證規則時顯示。如果您未設定 ValidationText 屬性,Access 會顯示預設的錯誤訊息。

為欄位新增驗證規則

  1. 在 [瀏覽窗格] 中,以滑鼠右鍵按一下要變更的資料表,然後按一下捷徑功能表上的 [設計檢視]。

  2. 按一下您要變更的欄位。

  3. 按一下位於資料表設計工具下方區段的 [驗證規則] 屬性方塊。

  4. 輸入運算式,或按一下屬性方塊旁右邊的 [建立] 按鈕 [建立器] 按鈕 ,以使用 [運算式建立器] 來建立運算式。

    附註: 在建立驗證規則時,不要在運算式前面加上 = 運算子。

下表範例示範適用於 ValidationRule 屬性的驗證規則運算式,以及適用於 ValidationText 屬性的相關文字。

ValidationRule 屬性

ValidationText 屬性

<> 0

請輸入非零值。

0 Or > 100

值必須是 0 或大於 100。

Like "K???"

值必須是以字母 K 開頭的四個字元。

< #1/1/2007#

輸入的日期必須早於 2007 年 1 月 1 日。

>= #1/1/2007# And < #1/1/2008#

日期必須在 2007 年內。

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

頁面頂端

巨集條件運算式的範例

在某些情況下,只有在特定條件為 True 時,才建議您執行單一指令或以巨集執行一連串指令。舉例來說,假設您只想在 Counter 文字方塊為 10 時才執行某個指令,您可在巨集的 [條件] 欄中使用運算式來定義條件:[Counter]=10

為巨集指令新增條件

  1. 在 [瀏覽窗格] 中,以滑鼠右鍵按一下要變更的巨集,然後按一下捷徑功能表上的 [設計檢視]。

  2. 如果您在巨集設計工具中找不到 [條件] 欄,請前往 [設計] 索引標籤,按一下 [顯示/隱藏] 群組中的 [條件]。

  3. 針對您要變更的巨集指令按一下 [條件] 儲存格,然後輸入條件運算式。

  4. 儲存變更並關閉巨集。

ValidationRule 屬性相同,[條件] 欄運算式也採用條件運算式。它必須判斷值為 True 或 False。只有當條件為 True 時,系統才會執行指令。

使用這個運算式來執行指令

如果

[City]="巴黎"

若表單欄位中的 City 值為巴黎,系統就會執行巨集。

DCount("[OrderID]", "訂單") > 35

若訂單資料表中的 OrderID 欄位超過 35 個項目。

DCount("*", "[Order Details]", "[OrderID]=" & Forms![Orders]![OrderID]) > 3

若 Order Details 資料表中有超過 3 個項目的 OrderID 欄位與 Orders 表單的 OrderID 欄位相符。

[ShippedDate] Between #2-Feb-2007# And #2-Mar-2007#

若表單上 ShippedDate 欄位的值介於 2007 年 2 月 2 日和 2007 年 3 月 2 日之間時,系統就會執行巨集。

Forms![Products]![UnitsInStock] < 5

Products 表單上的 UnitsInStock 欄位值小於 5。

IsNull([FirstName])

若表單上的 FirstName 值為 Null (沒有值) 時,系統就會執行巨集。也就是說,此運算式的作用等同於 [FirstName] 為 Null。

[CountryRegion]="英國" And Forms![SalesTotals]![TotalOrds] > 100

若表單上 CountryRegion 欄位值為英國,且 SalesTotals 表單上的 TotalOrds 欄位值大於 100 時,系統就會執行巨集。

[CountryRegion] In ("法國", "義大利", "西班牙") And Len([PostalCode])<>5

若表單上 CountryRegion 欄位值為法國、義大利或西班牙,且 PostalCode 長度不是 5 個字元時,系統就會執行巨集。

MsgBox("Confirm changes?",1)=1

若您在 MsgBox 函數所顯示的對話方塊中按一下 [確定]。若您在對話方塊中按一下 [取消],Access 就會略過指令。

附註: 若要強制 Access 暫時略過指令,請輸入 False 做為條件。當您嘗試解決巨集出錯時,強制 Access 暫時略過指令非常有用。

頁面頂端

擴展您的技能
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×