查詢條件示例
若要基于字段中的值來限制查詢的結果,則可使用查詢條件。查詢條件是一個表達式,Access 將它與查詢字段值進行比較以確定是否包括含有每個值的記錄。例如,= "Chicago" 是一個表達式,Access 可將它與查詢中的文本字段的值進行比較。如果給定記錄中該字段的值為 "Chicago",則 Access 會在查詢結果中包含此記錄。
本主題列出了多個查詢條件示例。本文假設您熟悉如何設計簡單的選擇查詢。
若要了解有關查詢的詳細信息,請參閱查詢簡介一文。
本主題內容
條件與公式類似,它是一個可能包含字段引用、運算符 (運算符:一個標記或符號,指定表達式內執(zhí)行的計算的類型。有數學、比較、邏輯和引用運算符等。)和常量 (常量:不進行計算的值,因此也不會發(fā)生變化。例如,數字 210 以及文本“每季度收入”都是常量。表達式以及表達式產生的值都不是常量。)的字符串。查詢條件也稱為表達式。
下表顯示了某些示例條件并說明它們如何工作。
條件 |
說明 |
>25 and <50 |
此條件適用于數字字段,如“價格”或“庫存量”。它僅包含這樣的記錄:其中“價格”或“庫存量”字段包含大于 25 且小于 50 的值。 |
DateDiff ("yyyy", [出生日期], Date()) > 30 |
此條件適用于日期/時間字段,如“出生日期”。只有某人的出生日期與今天的日期之間相差的年數大于 30 的記錄才會包含在查詢結果中。 |
Is Null |
此條件可用于任何類型的字段,以顯示字段值為 Null 的記錄。 |
各個條件之間看上去可能有很大的不同。某些條件很簡單,它們只使用基本運算符(如“<”)和常量(如“50”)。而有些條件很復雜,它們使用函數(如“DateDiff”)或字段引用(如“[出生日期]”)。
本主題提供了一些常用條件的示例,并按這些條件所應用于的數據類型對其進行了分組。您可以將本主題中提供的條件示例作為起點,開始著手編寫自己的條件。此外,您可能需要熟悉函數、運算符、特殊字符和表達式的語法。有關詳細信息,請參閱“請參閱”部分中列出的文章。
若要向查詢添加條件,您必須在設計視圖中打開查詢。然后標識要為其指定條件的字段。如果要為其指定條件的字段尚未包含在設計網格中,則您可以添加該字段,方法是將該字段從查詢設計窗口拖動到設計網格,或者雙擊該字段。如果所需字段包含在設計網格中,則在“條件”行中鍵入該字段的條件。
您在“條件”行中為不同字段指定的條件使用 AND 運算符組合在一起。例如,可以為“城市”字段指定條件 ="福州",并為“出生日期”字段指定條件 < DateAdd("yyyy", -40, Date())。這兩個條件組合在一起進行解釋,如下所示:
城市 = "福州" AND 出生日期 < DateAdd("yyyy", -40, Date())
“城市”和“出生日期”字段都包括條件。
只有“城市”字段的值為“福州”的記錄將滿足此條件。
只有至少為 40 歲的那些人的記錄將滿足此條件。
只有同時滿足這兩個條件的記錄才會包括在結果中。
如果您有二選一條件(即兩組獨立的條件,只要滿足其中一組即可),則可以同時使用設計網格中的“條件”和“或”行。
“城市”條件是在“條件”行中指定的。
“出生日期”條件是在“或”行中指定的。
“條件”和“或”行中指定的條件是使用 OR 運算符組合的,如下所示:
城市 = "福州" OR 出生日期 < DateAdd("yyyy", -40, Date())
如果您需要指定更多備選條件,請使用“或”行下面的行。
在繼續(xù)這些示例之前,請注意下列幾點:
✍ | 如果條件是臨時的或者經常更改,則可以篩選查詢結果,而不是頻繁修改查詢條件。篩選器會更改查詢結果,而不會更改查詢設計。有關篩選器的詳細信息,請參閱“請參閱”部分。 |
✍ | 如果條件字段不變,但您要使用的值頻繁更改,則可以創(chuàng)建參數查詢。在運行參數查詢時,該查詢會要求您輸入值,然后使用您輸入的值創(chuàng)建查詢條件。有關創(chuàng)建要求輸入值的查詢的詳細信息,請參閱“請參閱”部分。 |
下面的示例針對某個查詢中的“國家/地區(qū)”字段,該查詢基于一個存儲聯系人信息的表。條件是在設計網格中該字段的“條件”行中指定的。
若要包含滿足下面條件的記錄 |
使用此條件 |
查詢結果 |
完全匹配一個值,如“China” |
"China" |
返回“國家/地區(qū)”字段設置為“China”的記錄。 |
不匹配某個值,如“Mexico” |
Not "Mexico" |
返回“國家/地區(qū)”字段設置為“Mexico”以外的國家/地區(qū)的記錄。 |
以指定的字符串開頭,如 U |
Like U* |
返回名稱以“U”開頭的所有國家/地區(qū)(如 UK、USA 等等)的記錄。 注釋 當在表達式中使用星號 (*) 時,它表示任意字符串 - 它也稱為通配符。 有關此類字符的列表,請參閱文章 ACCESS 通配符參考。 |
不以指定字符串開頭,如 U |
Not Like U* |
返回名稱以“U”以外的字符開頭的所有國家/地區(qū)的記錄。 |
包含指定字符串,如“Korea” |
Like "*Korea*" |
返回包含字符串“Korea”的所有國家/地區(qū)的記錄。 |
不包含指定字符串,如“Korea” |
Not Like "*Korea*" |
返回不包含字符串“Korea”的所有國家/地區(qū)的記錄。 |
以指定字符串結尾,如“ina” |
Like "*ina" |
返回名稱以“ina”結尾的所有國家/地區(qū)(如 China 和 Argentina)的記錄。 |
不以指定字符串結尾,如“ina” |
Not Like "*ina" |
返回以“ina”結尾的所有國家/地區(qū)(如 China 和 Argentina)之外的記錄。 |
包含 Null 值(即缺少值) |
Is Null |
返回該字段中沒有值的記錄。 |
不包含 Null 值 |
Is Not Null |
返回該字段中不缺少值的記錄。 |
包含零長度字符串 |
""(一對引號) |
返回該字段設置為空(不是 Null)值的記錄。例如,提供給另一個部門的銷售記錄可能在“國家地區(qū)”字段中包含空值。 |
不包含零長度字符串 |
Not "" |
返回“國家/地區(qū)”字段含有非空值的記錄。 |
包含 Null 值或零長度字符串 |
"" Or Is Null |
返回該字段中沒有值或者該字段設置為空值的記錄。 |
不為空 |
Is Not Null And Not "" |
返回“國家/地區(qū)”字段含有非空、非 Null 值的記錄。 |
按字母順序排在某個值(如 Mexico)后面 |
>= "Mexico" |
返回從 Mexico 開始一直到字母表結束的所有國家/地區(qū)的記錄。 |
在指定范圍內,如 A 到 D |
Like "[A-D]*" |
返回名稱以字母“A”到“D”開頭的國家/地區(qū)的記錄。 |
匹配兩個值中的任一值,如 USA 或 UK |
"USA" Or "UK" |
返回對應 USA 和 UK 的記錄。 |
包含值列表中的任一值 |
In("France", "China", "Germany", "Japan") |
返回對應列表中指定的所有國家/地區(qū)的記錄。 |
在字段值的特定位置包含某些字符 |
Right([CountryRegion], 1) = "y" |
返回最后一個字母為“y”的所有國家/地區(qū)的記錄。 |
滿足長度要求 |
Len([CountryRegion]) > 10 |
返回名稱長度大于 10 個字符的國家/地區(qū)的記錄。 |
匹配特定模式 |
Like "Chi??" |
返回名稱為五個字符長并且前三個字符為“Chi”的國家/地區(qū)(如 China 和 Chile)的記錄。 注釋 字符 ? 和 _ 在表達式中使用時表示單個字符,這些字符也稱為通配符。 字符 _ 不能在包含 ? 字符的表達式中使用,也不能在包含 * 通配符的表達式中使用。您可以在同時包含 % 通配符的表達式中使用通配符 _。 |
默認情況下,為超鏈接字段指定的條件將應用于該字段值的顯示文本部分,而非鏈接目標。若要為該值的目標統一資源定位器 (URL) 部分指定條件,請使用“HyperlinkPart”表達式。使用的語法與以下語法類似:HyperlinkPart([Table1].[Field1],1) = "http://www.microsoft.com/",其中 Table1 包含超鏈接字段的表的名稱,Field1 是超鏈接字段,http://www.microsoft.com 是要匹配的 URL。
下面的示例針對某個查詢中的“單價”字段,該查詢基于一個存儲產品信息的表。條件是在查詢設計網格中該字段的“條件”行中指定的。
若要包含滿足下面條件的記錄 |
使用此條件 |
查詢結果 |
完全匹配一個值,如 100 |
100 |
返回產品單價為 ¥100 的記錄。 |
不匹配某個值,如 1000 |
Not 1000 |
返回產品單價不為 ¥1000 的記錄。 |
包含小于某個值(如 100)的值 |
< 100 <= 100 |
返回單價低于 ¥100 (<100) 的記錄。第二個表達式 (<=100) 顯示單擊低于或等于 ¥100 的記錄。 |
包含大于某個值(如 99.99)的值 |
>99.99 >=99.99 |
返回單價高于 ¥99.99 (> 99.99) 的記錄。第二個表達式顯示單擊高于或等于 ¥99.99 的記錄。 |
包含兩個值(如 20 或 25)中的任一值 |
20 or 25 |
返回單價為 ¥20 或 ¥25 的記錄。 |
包含某個值范圍之內的值 |
>49.99 and <99.99 - 或 - Between 50 and 100 |
返回單價介于(但不包括)¥49.99 和 ¥99.99 之間的記錄。 |
包含某個范圍之外的值 |
<50 or >100 |
返回單價不在 ¥50 和 ¥100 之間的記錄。 |
包含多個特定值之一 |
In(20, 25, 30) |
返回單價為 ¥20、¥25 或 ¥30 的記錄。 |
包含以指定數字結尾的值 |
Like "*4.99" |
返回單價以“4.99”結尾(如 ¥4.99、¥14.99、¥24.99 等等)的記錄。 注釋 字符 * 和 % 在表達式中使用時表示任意數量的字符,這些字符也稱為通配符。 字符 % 不能在包含 * 字符的表達式中使用,也不能在包含 ? 通配符的表達式中使用。您可以在同時包含 _ 通配符的表達式中使用通配符 %。 |
包含 Null 值(即缺少值) |
Is Null |
返回“單價”字段中未輸入值的記錄。 |
包含非 Null 值 |
Is Not Null |
返回“單價”字段中不缺少值的記錄。 |
下面的示例針對某個查詢中的“訂購日期”字段,該查詢基于一個存儲訂單信息的表。條件是在查詢設計網格中該字段的“條件”行中指定的。
若要包含滿足下面條件的記錄 |
使用此條件 |
查詢結果 |
完全匹配一個值,如 2/2/2006 |
#2/2/2006# |
返回交易發(fā)生在 2006 年 2 月 2 日的記錄。請記住在日期值兩邊括以 # 字符,以使 Access 可區(qū)分日期值和文本字符串。 |
不匹配某個值,如 2/2/2006 |
Not #2/2/2006# |
返回交易不是發(fā)生在 2006 年 2 月 2 日的記錄。 |
包含某個特定日期(如 2/2/2006)之前的值 |
< #2/2/2006# |
返回交易發(fā)生在 2006 年 2 月 2 日之前的記錄。 若要查看發(fā)生在該日期或該日期之前的交易,請使用 <= 運算符而不是 < 運算符。 |
包含某個特定日期(如 2/2/2006)之后的值 |
> #2/2/2006# |
返回交易發(fā)生在 2006 年 2 月 2 日之后的記錄。 若要查看交易發(fā)生在該日期或該日期之后的記錄,請使用 >= 運算符而不是 > 運算符。 |
包含某個日期范圍之內的值 |
>#2/2/2006# and <#2/4/2006# |
返回交易發(fā)生在 2006 年 2 月 2 日和 2006 年 2 月 4 日之間的記錄。 您還可以使用 Between 運算符來篩選一個范圍值(包括端點值)。例如,Between #2/2/2006# and #2/4/2006# 與 >=#2/2/2006# and <=#2/4/2006# 相同。 |
包含某個范圍之外的值 |
<#2/2/2006# or >#2/4/2006# |
返回交易發(fā)生在 2006 年 2 月 2 日之前或 2006 年 2 月 4 日之后的記錄。 |
包含兩個值中的任一值,如 2/2/2006 或 2/3/2006 |
#2/2/2006# or #2/3/2006# |
返回交易發(fā)生在 2006 年 2 月 2 日或 2006 年 2 月 3 日的記錄。 |
包含多個值之一 |
In (#2/1/2006#, #3/1/2006#, #4/1/2006#) |
返回交易發(fā)生在 2006 年 2 月 1 日、2006 年 3 月 1 日或 2006 年 4 月 1 日的記錄。 |
包含特定月份(與年份無關)內的某個日期,如 12 月 |
DatePart("m", [銷售日期]) = 12 |
返回交易發(fā)生在任何一年的 12 月的記錄。 |
包含特定季度(與年份無關)內的某個日期,如一季度 |
DatePart("q", [銷售日期]) = 1 |
返回交易發(fā)生在任一年的第一季度的記錄。 |
包含今天的日期 |
Date() |
返回交易發(fā)生在當天的記錄。如果當天日期為 2/2/2006,則您將看到“訂購日期”字段設置為 2006 年 2 月 2 日的記錄。 |
包含昨天的日期 |
Date()-1 |
返回交易發(fā)生在當天的前一天的記錄。如果當天日期為 2/2/2006,則您將看到 2006 年 2 月 1 日的記錄。 |
包含明天的日期 |
Date() + 1 |
返回交易發(fā)生在當天的后一天的記錄。如果當天日期為 2/2/2006,則您將看到 2006 年 2 月 3 日的記錄。 |
包含當前星期內的日期 |
DatePart("ww", [銷售日期]) = DatePart("ww", Date()) and Year( [銷售日期]) = Year(Date()) |
返回交易發(fā)生在當前星期內的記錄。一個星期從星期日開始到星期六結束。 |
包含上一星期內的日期 |
Year([銷售日期])* 53 + DatePart("ww", [銷售日期]) = Year(Date())* 53 + DatePart("ww", Date()) - 1 |
返回交易發(fā)生在上個星期的記錄。一個星期從星期日開始到星期六結束。 |
包含下個星期內的日期 |
Year([銷售日期])* 53+DatePart("ww", [銷售日期]) = Year(Date())* 53+DatePart("ww", Date()) + 1 |
返回交易將在下個星期發(fā)生的記錄。一個星期從星期日開始到星期六結束。 |
包含前 7 天內的日期 |
Between Date() and Date()-6 |
返回交易發(fā)生在前 7 天的記錄。如果當天日期為 2/2/2006,則您將看到從 2006 年 1 月 24 日到 2006 年 2 月 2 日這段時間的記錄。 |
包含屬于當前月的日期 |
Year([銷售日期]) = Year(Now()) And Month([銷售日期]) = Month(Now()) |
返回當前月的記錄。如果當天日期為 2/2/2006,則您將看到 2006 年 2 月的記錄。 |
包含屬于上個月的日期 |
Year([銷售日期])* 12 + DatePart("m", [銷售日期]) = Year(Date())* 12 + DatePart("m", Date()) - 1 |
返回上個月的記錄。如果當天日期為 2/2/2006,則您將看到 2006 年 1 月的記錄。 |
包含屬于下個月的日期 |
Year([銷售日期])* 12 + DatePart("m", [銷售日期]) = Year(Date())* 12 + DatePart("m", Date()) + 1 |
返回下個月的記錄。如果當天日期為 2/2/2006,則您將看到 2006 年 3 月的記錄。 |
包含前 30 天或 31 天內的日期 |
Between Date( ) And DateAdd("M", -1, Date( )) |
一個月的銷售記錄。如果當天日期為 2/2/2006,則您將看到從 2006 年 1 月 2 日到 2006 年 2 月 2 日這段時間的記錄 |
包含屬于當前季度的日期 |
Year([銷售日期]) = Year(Now()) And DatePart("q", Date()) = DatePart("q", Now()) |
返回當前季度的記錄。如果當天日期為 2/2/2006,則您將看到 2006 年一季度的記錄。 |
包含屬于上個季度的日期 |
Year([銷售日期])*4+DatePart("q",[銷售日期]) = Year(Date())*4+DatePart("q",Date())- 1 |
返回上個季度的記錄。如果當天日期為 2/2/2006,則您將看到 2005 年最后一個季度的記錄。 |
包含屬于下個季度的日期 |
Year([銷售日期])*4+DatePart("q",[銷售日期]) = Year(Date())*4+DatePart("q",Date())+1 |
返回下個季度的記錄。如果當天日期為 2/2/2006,則您將看到 2006 年二季度的記錄。 |
包含當年內的日期 |
Year([銷售日期]) = Year(Date()) |
返回當年的記錄。如果當天日期為 2/2/2006,則您將看到 2006 年的記錄。 |
包含屬于去年的日期 |
Year([銷售日期]) = Year(Date()) - 1 |
返回交易發(fā)生在去年的記錄。如果當天日期為 2/2/2006,則您將看到 2005 年的記錄。 |
包含屬于明年的日期 |
Year([銷售日期]) = Year(Date()) + 1 |
返回交易日期為明年的記錄。如果當天日期為 2/2/2006,則您將看到 2007 年的記錄。 |
包含介于 1 月 1 日和今天之間的日期(當年到今天為止的記錄) |
Year([銷售日期]) = Year(Date()) and Month([銷售日期]) <= Month(Date()) and Day([銷售日期]) <= Day (Date()) |
返回交易日期介于當年 1 月 1 日到當天之間的記錄。如果當天日期為 2/2/2006,則您將看到從 2006 年 1 月 1 日到 2006 年 2 月 2 日這段時間的記錄。 |
包含發(fā)生在過去的日期 |
< Date() |
返回交易發(fā)生在當天之前的記錄。 |
包含發(fā)生在將來的日期 |
> Date() |
返回交易將在當天之后發(fā)生的記錄。 |
篩選 Null 值(即缺少值) |
Is Null |
返回缺少交易日期的記錄。 |
篩選非 Null 值 |
Is Not Null |
返回交易日期已知的記錄。 |
“是/否”字段 在“條件”行中,鍵入是以包含復選框已選中的記錄。鍵入“否”以包含復選框未選中的記錄。
附件 在“條件”行中,鍵入 Is Null 以包含不含任何附件的記錄。鍵入 Is Not Null 以包含含有附件的記錄。
“查閱”字段 有兩種類型的“查閱”字段:在現有數據源中查閱值的“查閱”字段(使用外鍵)以及基于創(chuàng)建“查閱”字段時指定的值列表的“查閱”字段。
基于指定值的列表的“查閱”字段為文本數據類型,并且有效條件與其他文本字段相同。
可在基于現有數據源值的“查閱”字段中使用的條件取決于外鍵的數據類型,而不是所查閱的數據的數據類型。例如,您可能有一個顯示雇員姓名的“查閱”字段,但是該字段使用數字數據類型的外鍵。因為該字段存儲數字而不是文本,所以應使用對數字起作用的條件;即 >2。
如果不知道外鍵的數據類型,則可以在設計視圖中查看源表以確定字段的數據類型。要執(zhí)行此操作:
1. | 在“導航窗格”中找到源表。 |
2. | 使用下列方法之一在設計視圖中打開該表: |
✍ | 單擊該表,然后按 Ctrl+Enter |
✍ | 右鍵單擊該表,然后單擊“設計視圖”。 |
3. | 在表設計網格的“數據類型”列中列出了每個字段的數據類型。 |
多值字段 多值字段中的數據作為行存儲在隱藏表中,該表由 Office Access 2007 創(chuàng)建并填充以用于表示該字段。在查詢設計視圖中,它是通過使用可展開字段在“字段列表”中表示的。若要對多值字段使用條件,應為隱藏表中的單個行提供條件。要執(zhí)行此操作:
1. | 創(chuàng)建一個包含多值字段的查詢,并在設計視圖中打開它。 |
2. | 單擊多值字段旁邊的加號 (+) 將其展開(如果該字段已經展開,則此符號為減號 (-))。 就在該字段的名稱下面,您將看到一個代表該多值字段的某一個值的字段。此字段將與多值字段同名,但后面跟有字符串“.Value”。 |
3. | 將多值字段及其單值字段拖至設計網格中單獨的列中。如果想在結果中只看到完整的多值字段,請清除對應單值字段的“顯示”復選框。 |
4. | 在單值字段的“條件”行中鍵入您的條件,使用適合于這些值所表示的數據類型的條件。 |
5. | 多值字段中的每個值將使用您提供的條件單獨求值。例如,您可能有一個存儲了一系列數字的多值字段。如果提供條件 >5 AND <3,則任何至少有一個值大于 5 且一個值小于 3 的記錄都將匹配。 |