運算式語法指南

使用 Microsoft Access 時,您常會需要直接使用不在資料中的值。例如,您想要計算某份訂單的營業稅或訂單本身的總價值。您可以使用運算式來計算這些值。為了進行運算,您得以正確的語法撰寫運算式。語法是一套以正確方式組合運算式中字詞與符號的規則。在一開始,Access 裡的運算式會有些難以閱讀,不過在正確了解運算式語法,並稍加練習之後,就容易多了。

本文內容

運算式概觀

運算式的組成

物件、集合和屬性

識別碼

函數、運算子、常數和值

在 Web 資料庫中,運算式的巢狀限制是 65 個層級

運算式概觀

運算式是由下列部分或全部項目組合而成:內建函數或使用者定義的函數、識別碼、運算子、值和常數,以此求出單一個值。

運算式的組成

例如,以下運算式包含了常見的元素:

=Sum([Purchase Price])*0.08 
  • Sum() 是內建函數

  • [Purchase Price] 是識別碼

  • * 是數學運算子

  • 0.08 是常數

這個運算式可以用於表單尾或報表尾的文字方塊中,以計算一組產品的營業稅。

運算式可能比這個範例複雜得多,也可能簡單得多。例如,這個布林值運算式只包含一個運算子和一個常數:

>0

這個運算式會在︰

  • 與大於 0 的數字比較時,傳回 True

  • 與小於 0 的數字比較時,傳回 False

您可以在控制項或資料表欄位的 [驗證規則] 屬性中使用這個運算式,以確保只輸入正數值。很多地方都可以使用運算式來執行計算、控制字元或測試資料。資料表、查詢、表單、報表和巨集都有接受運算式的屬性。例如,您可以在控制項的 [控制項資料來源] 和 [預設值] 屬性中使用運算式。也可以在資料表欄位的 [驗證規則] 屬性中使用運算式。

頁面頂端​​

運算式的組成

若要建立運算式,您需要使用函數、運算子、常數和值來結合識別碼。任何有效運算式都必須含有至少一種函數或一項識別碼,且可以同時包含常數或運算子。您也可以將運算式當做另一個運算式的一部分 (通常是做為函數中的引數)。這就稱為巢狀運算式。

  • 識別碼   的一般形式為:

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

    您只需要在識別碼中,指定足夠讓它成為運算式中唯一識別碼的項目即可。識別碼不常以 [Object name] 的形式出現。

  • 函數   的一般形式為:

    Function(argument, argument)

    其中一個引數通常是識別碼或運算式。部分函數並不需要引數。在您使用特定函數前,請再次查閱該函數的語法。如需詳細資訊,請參閱函數 (依類別排列)

  • 運算子   的一般形式為:

    Identifier operator identifier

    關於此形式的例外狀況,請參閱運算子一節的詳細說明。

  • 常數   的一般形式為:

    Identifier comparison_operator  constant
  •    可能會發生在運算式中的多個位置。

頁面頂端​​

物件、集合和屬性

Access 資料庫中所有資料表、查詢、表單、報表及欄位都可以稱為個別的「物件」。每個物件都有其名稱,有些物件可能已經完成命名 (例如以 Microsoft Office Access 連絡人範本為基礎建立之資料庫的 [連絡人] 資料表),若您建立了新的物件,請為它命名。

一組內容全都為某種特定物件類型的組合稱為「集合」。舉例來說,一個資料庫中所有資料表的組合為一個集合。您資料庫中的物件可能屬於某個集合,同時也是含有其他物件的集合。例如,資料表是一個包含欄位物件的集合。

物件擁有「屬性」,屬性會描述物件的特性,並提供變更這些特性的方法。例如,查詢物件具有的 [預設檢視方法] 屬性,能描述並讓您指定執行該查詢時的顯示方式。

下圖說明集合、物件和屬性之間的關係:

集合、物件及屬性的關係

3 一個屬性

2 一個物件

1 一個集合

頁面頂端​​

識別碼

在運算式中使用物件、集合或屬性時,您需要使用「識別碼」來參照至該元素。識別碼會包含您要識別之元素的名稱以及它所屬元素的名稱。舉例來說,一個欄位的識別碼會包括欄位名稱,以及該欄位所屬資料表的名稱。這類識別碼的例子為:

[Customers]![BirthDate]

某些情況下,元素的名稱即可當做識別碼。當元素名稱在您建立的運算式內容中為唯一值時,此規則即會成立,識別碼的其他部分則由上下文進行推斷。舉例來說,如果您設計的查詢中只使用一個資料表,那麼欄位名稱本身即可當成識別碼使用,因為資料表中的欄位名稱勢必為該資料表中的唯一值。由於只使用一個資料表,在脈絡上,您於查詢中參照的任何欄位識別碼都是暗指該資料表名稱而言。

在其他情況下,您必須明確指出識別碼的各部分才能讓參照發揮作用。若識別碼不是運算式中的唯一值,此規則即會成立。當所指模稜兩可時,您就必須明確指定識別碼的各部分,讓它成為上下文脈絡中的唯一值。例如,假設您設計的查詢中使用了兩張資料表:[產品] 和 [訂單],且這兩者都各自有一個叫做 [產品識別碼] 的欄位。在這種情況下,您在查詢中用來參照至任一 [產品識別碼] 欄位的識別碼除了欄位名稱之外,還必須再加上資料表的名稱。例如:

[Products]![ProductID]

識別碼運算子   :在識別碼中,您可以使用三種運算子:

  • 驚嘆號運算子 (!)

  • 點運算子 (.)

  • 方括號運算子 ([ ])

這些運算子的使用方法為:以方括號將識別碼的各部分括起來,然後使用驚嘆號或點運算子進行連接。例如,[員工] 資料表中 [姓氏] 欄位的識別碼可以表示為 [Employees]![Last Name],驚嘆號運算子會告訴 Access,在運算子後方的物件屬於運算子前方所述之集合。在這個例子中,[姓氏] 是一個屬於 [員工] 集合的欄位物件,而後者本身也是一個資料表物件。

嚴格來說,您並不必每次都以方括號括住部分或是整個識別碼。如果識別碼中沒有空格或其他特殊字元,Access 會在讀取運算式時自動加上括號。不過,由您自行輸入括號是個良好習慣,可以協助您避免錯誤發生,也能讓您一眼認出運算式中哪些部分是識別碼。

頁面頂端​​

函數、運算子、常數和值

建立運算式不只需要識別碼,您還需要執行某種動作。您可以使用函數、運算子和常數來執行運算式中的動作。

函數

函數是一種您可以在運算式中使用的程序。有些函數 (例如 Date) 不需要輸入任何項目就能運作。不過,大部分的函數都需要您輸入「引數」。

在本文開頭提到的範例中,DatePart 函數使用了兩個引數:一個是 interval 引數 (其值為 "yyyy"),以及 date 引數 (其值為 [Customers]![BirthDate])。DatePart 函數至少需要兩個引數 (interval 和 date),但最多可以接受四個引數。

下列清單列出一些運算式常用的函數。如需函數使用語法的詳細資訊,請按一下各函數連結。

  • 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 比較的結果也會是未知的。

邏輯運算子   

您可以使用邏輯運算子來結合兩個值,然後傳回 True、False 或 Null 其中一種結果。邏輯運算子也稱為布林值運算子。

運算子​​

用法

描述

And

運算式1 And 運算式2

當運算式1 和運算式2 皆為 True 時,結果為 True。

Or

運算式1 Or 運算式2

當運算式1 或運算式2 任何一個為 True 時,結果為 True。

Eqv

運算式1 Eqv 運算式2

當運算式1 和運算式2 皆為 True,或運算式1 和運算式2 皆為 False 時,結果為 True。

Not

Not 運算式

運算式不是 True 時,結果為 True。

Xor

運算式1 Xor 運算式2

當運算式1 為 True,或運算式2 為 True,但並非兩者同時為 True 時,結果為 True。

串連運算子   

您可以使用串連運算子,將兩個文字值結合成一個字串。

運算子​​

用法

描述

&

字串1 & 字串2

將兩個字串結合成為一個字串。

+

字串1 + 字串2

將兩個字串結合成為一個字串,並且傳播 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 或字串 "Enter a number between 1 and 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 遇到用 # 字元括住的有效日期/時間值時,會自動將值視為「日期/時間」資料類型。

頁面頂端​​

在 Web 資料庫中,運算式的巢狀限制是 65 個層級

巢狀結構超過 65 層的運算式無法在瀏覽器中運作,因此您不應該在 Access Web 資料庫中使用這類運算式。您將不會收到任何錯誤訊息,只是運算式不會發生作用而已。

使用 &ANDOR 運算子可以在伺服器上建立不會反映到 Access 用戶端的其他巢狀層級。例如,運算式 "a" & "b" & "c" 在運算式建立器中不是巢狀結構,但是在 SharePoint 中,該運算式會變成 concatenate.Db("a", concatenate.Db("b", "c") )。這項轉譯會建立一個層級的巢狀結構。如果在單一運算式中使用許多連續的 &ANDOR 運算子,便可能會超過 65 個層級的伺服器巢狀限制,因而導致運算式無法在瀏覽器中運作。

頁面頂端​​

請參閱

使用運算式建立器

運算式簡介

建立運算式

運算式的範例

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

這項資訊有幫助嗎?

感謝您的意見反應!

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

×