查詢準則可協助您將注意力集中於 Access 資料庫中的特定項目。 如果項目符合您輸入的所有準則,則會顯示於查詢結果中。
若要將準則新增至 Access 查詢,請在 [設計檢視] 中開啟查詢,並識別您要指定準則的欄位 (欄)。 如果欄位不在設計格線中,請按兩下欄位以將其新增至設計格線,然後在該欄位的 [準則] 列中輸入準則。 如果您不確定該如何進行,請參閱查詢簡介。
查詢準則是一個運算式,Access 會將其與查詢欄位值做比較,以決定是否要加入包含每個值的記錄。 例如,= "Chicago" 是一個運算式,Access 可將其與查詢的文字欄位中的值做比較。 如果指定記錄中該欄位的值為 "Chicago",Access 會在查詢結果中包括記錄。
您可以使用下列常用準則範例,做為建立準則的起點。 這些範例都是依資料類型分組。
本主題內容
查詢準則簡介
準則與公式相似,它是可能包含欄位參照、運算子及常數的字串。 查詢準則在 Access 中也稱為運算式。
下表顯示部分範例準則,並說明其運作方式。
準則 |
描述 |
---|---|
>25 and <50 |
這個準則適用於 [數字] 欄位,例如 [Price] 或 [UnitsInStock]。 它只包含其 [Price] 或 [UnitsInStock] 欄位值大於 25 並小於 50 的記錄。 |
DateDiff ("yyyy", [BirthDate], Date()) > 30 |
這個準則適用於 [日期/時間] 欄位,例如 [BirthDate]。 查詢結果只會包含人員的生日與今天日期之間的年數大於 30 的記錄。 |
Is Null |
這個準則可以套用至任何類型的欄位,以顯示欄位值為 Null 的記錄。 |
如您所見,準則彼此看起來可能極為不同,視其套用之欄位的資料類型和您的特定需求而定。 某些準則很簡單,並使用基本運算子和常數。 其他準則則很複雜,並使用函數、特殊運算子,且包含欄位參照。
本主題依資料類型列出數個常用的準則。 如果本主題的範例並未符合您的特殊需求,您可能需要撰寫您自己的準則。 若要這麼做,您必須先熟悉函數、運算子、特殊字元,以及參照欄位和常值之運算式語法的完整清單。
在這裡,您會找到新增準則的位置和方式。 若要將準則新增至查詢,您必須在 [設計檢視] 中開啟查詢。 然後就可以識別您要為其指定準則的欄位。 如果欄位尚未在設計格線中,您可以藉由將欄位從查詢設計視窗拖曳至欄位格線,或按兩下欄位的方式來新增欄位 (按兩下欄位會自動將它新增至欄位格線中的下一個空白資料行)。 最後,在 [準則] 資料列中輸入準則
您在 [準則] 資料列中為不同的欄位指定的準則會使用 AND 運算子加以合併。 換句話說,[City] 和 [BirthDate] 欄位中指定的準則會解譯成類似於:
City = "Chicago" AND BirthDate < DateAdd (" yyyy ", -40, Date())
1. [City] 和 [BirthDate] 欄位包含準則。
2. 只有 [City] 欄位值為 Chicago 的記錄才會滿足此準則。
3. 只有年齡至少為 40 歲之人的記錄才會滿足此準則。
4. 只有符合上述兩個準則的記錄才會包含在結果中。
如果您只想要符合其中一項條件,該怎麼辦? 換句話說,如果有替代準則,該如何輸入?
如果有替代準則,或足以滿足一個集合的兩組獨立準則,您可以在設計格線中使用 [準則] 和 [or] 資料列。
1. [City] 準則是在 [準則] 資料列中指定。
2. [BirthDate] 準則是在 [or] 資料列中指定。
[準則] 和 [or] 資料列中指定的準則會使用 OR 運算子加以合併,如下所示:
縣/市 = "台北" OR 生日 < DateAdd (" yyyy ", -40, Date())
如果需要指定其他的替代項目,請使用 [or] 資料列下方的列。
繼續閱讀範例之前,請注意下列事項:
-
如果準則是暫時的或經常變更,您可以篩選查詢結果,而非經常修改查詢準則。 篩選是會變更查詢結果的暫時準則,不需要改變查詢的設計。 如需有關篩選的詳細資訊,請參閱套用篩選以檢視 Access 資料庫中精選之記錄一文。
-
如果準則欄位不變,但您要使用的值卻經常在變,您可建立參數查詢。 參數查詢會提示使用者輸入欄位值,然後使用這些值來建立查詢準則。 如需有關參數查詢的詳細資訊,請參閱在查詢和報表中使用參數一文。
適用於文字、備忘和超連結欄位的準則
下列範例用於示範以儲存連絡人資訊的資料表為基礎之查詢中的 [CountryRegion] 欄位。 準則是在設計格線中欄位的 [準則] 資料列中指定。
依預設,您為 [超連結] 欄位指定的準則會套用至欄位值的顯示文字部分。 若要為值的目的地統一資源定位器 (URL) 部分指定準則,請使用 HyperlinkPart 運算式。 這個運算式的語法如下:HyperlinkPart([Table1].[Field1],1) = "http://www.microsoft.com/",其中 Table1 是含有超連結欄位的資料表名稱,Field 1 是超連結欄位,而 http://www.microsoft.com 是您想要比對的 URL。
若要包含滿足下列條件的記錄... |
使用這個準則 |
查詢 結果 |
---|---|---|
與某值 (例如 China (中國)) 完全相符 |
"China" |
傳回 [CountryRegion] 欄位設為 [China] 的記錄。 |
不符合某個值 (例如 Mexico (墨西哥)) |
Not "Mexico" |
傳回 [CountryRegion] 欄位設為非 Mexico (墨西哥) 之國家/地區的記錄。 |
開頭為指定的字串,例如 U |
Like U* |
針對名稱以 "U" 開頭的所有國家/地區 (如 UK (英國)、USA (美國) 等等) 傳回記錄。 附註: 運算式中使用的星號 (*) 代表任意字元字串,這種字元亦稱為萬用字元。 如需此類字元的清單,請參閱 Access 萬用字元參照一文。 |
開頭不是指定的字串,例如 U |
Not Like U* |
為名稱開頭不是 "U" 字元的所有國家/地區傳回記錄。 |
包含指定字串,例如 Korea (韓國) |
Like "*Korea*" |
傳回含有 "Korea" 字串的所有國家/地區的記錄。 |
不含指定字串,例如 Korea |
Not Like "*Korea*" |
傳回不含 "Korea" 字串的所有國家/地區的記錄。 |
結尾是指定的字串,例如 "ina" |
Like "*ina" |
針對名稱結尾是 "ina" (如 China (中國) 和 Argentina (阿根廷)) 的所有國家/地區傳回記錄。 |
結尾不是指定的字串,例如 "ina" |
Not Like "*ina" |
針對名稱結尾不是 "ina" (如 China (中國) 和 Argentina (阿根廷)) 的所有國家/地區傳回記錄。 |
包含 Null 值 (或缺少值) |
Is Null |
傳回欄位中沒有值的記錄。 |
不包含 Null 值 |
Is Not Null |
傳回欄位中未缺少值的記錄。 |
包含零長度字串 |
"" (一對雙引號) |
傳回欄位設定為空白值 (但非 Null) 的記錄。 例如,在其他部門的銷售記錄中,[CountryRegion] 欄位可能包含空白值。 |
不包含零長度字串 |
非 "" |
傳回 [CountryRegion] 欄位有一個非空白值的記錄。 |
包含 Null 值或零長度字串 |
"" Or Is Null |
傳回欄位中沒有值,或將欄位設為空白值的記錄。 |
為空值或空白值 |
Is Not Null And Not "" |
傳回 [CountryRegion] 欄位有非空白、非 Null 值的記錄。 |
依字母順序排列時,在某個值 (例如 Mexico (墨西哥)) 之後 |
>= "Mexico" |
傳回所有國家/地區中,始於 Mexico (墨西哥) 及直到字母順序結尾之所有項目的記錄。 |
落於特定範圍內,例如 A 到 D |
Like "[A-D]*" |
傳回名稱以字母 "A" 到 "D" 開頭之國家/地區的記錄。 |
符合兩個值 (例如 USA (美國) 和 UK (英國)) 中的其中一個 |
"USA" Or "UK" |
傳回 USA (美國) 和 UK (英國) 的記錄。 |
包含值清單中的某個值 |
In("France", "China", "Germany", "Japan") |
傳回清單中指定的所有國家/地區的記錄。 |
於欄位值的特定位置處含有特定字元 |
Right([CountryRegion], 1) = "y" |
傳回名稱最後一個字母是 "y" 的所有國家/地區的記錄。 |
符合長度要求 |
Len([CountryRegion]) > 10 |
傳回名稱長度大於 10 個字元的國家/地區的記錄。 |
符合特定模式 |
Like "Chi??" |
傳回國家/地區名稱長度是五個字元,且前三個字元是 "Chi" (如 China (中國) 和 Chile (智利)) 之項目的記錄。 附註: 在運算式中使用 ? 與 _ 字元時,代表單一字元,這些字元也稱為萬用字元。 _ 字元無法用於包含了 ? 字元的同一個運算式中,也無法用於包含了 * 萬用字元的運算式中。 您可以在另外包含 % 萬用字元的運算式中使用 _ 萬用字元。 |
適用於數值、貨幣和自動編號欄位的準則
下列範例用於示範以儲存產品資訊的資料表為基礎之查詢中的 [UnitPrice] 欄位。 準則是在查詢設計格線中欄位的 [準則] 資料列中指定。
若要包含滿足下列條件的記錄... |
使用這個準則 |
查詢結果 |
---|---|---|
與某個值 (例如 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 和 <99.99 -或- 在 50 到 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 |
傳回 [UnitPrice] 欄位中未輸入值的記錄。 |
包含非 Null 值 |
Is Not Null |
傳回 [UnitPrice] 欄位中未缺少值的記錄。 |
適用於日期/時間欄位的準則
下列範例用於示範以儲存訂單資訊的資料表為基礎之查詢中的 [OrderDate] 欄位。 準則是在查詢設計格線中欄位的 [準則] 資料列中指定。
若要包含滿足下列條件的記錄... |
使用這個準則 |
查詢結果 |
---|---|---|
與某個值完全符合,例如 2/2/2006 |
#2/2/2006# |
傳回 2006 年 2 月 2 日發生交易的記錄。 請記得以 # 字元括住日期值,讓 Access 可以區別日期值與文字字串。 |
不符合某個值,例如 2/2/2006 |
Not #2/2/2006# |
傳回 2006 年 2 月 2 日以外的某天發生交易的記錄。 |
包含特定日期之前的值,例如 2/2/2006 |
< #2/2/2006# |
傳回 2006 年 2 月 2 日之前發生交易的記錄。 若要檢視此日期當天或之前發生的交易,請使用 <= 運算子,而非 < 運算子。 |
包含特定日期之後的值,例如 2/2/2006 |
> #2/2/2006# |
傳回 2006 年 2 月 2 日之後發生交易的記錄。 若要檢視此日期當天或之後發生的交易,請使用 >= 運算子,而非 > 運算子。 |
包含落在某日期範圍內的值 |
>#2/2/2006# and <#2/4/2006# |
傳回 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# |
傳回 2006 年 2 月 2 日之前或 2006 年 2 月 4 日之後發生交易的記錄。 |
包含兩個值中的一個,例如 2/2/2006 或 2/3/2006 |
#2/2/2006# or #2/3/2006# |
傳回 2006 年 2 月 2 日或 2006 年 2 月 3 日發生交易的記錄。 |
包含多重值中的一個 |
In (#2/1/2006#, #3/1/2006#, #4/1/2006#) |
傳回 2006 年 2 月 1 日、2006 年 3 月 1 日或 2006 年 4 月 1 日發生交易的記錄。 |
包含落在特定月份中的日期 (不論年份),例如 12 月 |
DatePart("m", [SalesDate]) = 12 |
傳回任一年 12 月發生交易的記錄。 |
包含落在特定季度中的日期 (不論年份),例如第一季 |
DatePart("q", [SalesDate]) = 1 |
傳回任一年第一季發生交易的記錄。 |
包含今天的日期 |
Date() |
傳回目前日期發生交易的記錄。 如果今天的日期是 2/2/2006,會顯示 [OrderDate] 欄位設為 [Feb 2, 2006] 的記錄。 |
包含昨天的日期 |
Date()-1 |
傳回目前日期的前一天發生交易的記錄。 如果今天的日期是 2/2/2006,會顯示 2006 年 2 月 1 日的記錄。 |
包含明天的日期 |
Date() + 1 |
傳回目前日期的後一天發生交易的記錄。 如果今天的日期是 2/2/2006,會顯示 2006 年 2 月 3 日的記錄。 |
包含落在本週的日期 |
DatePart("ww", [SalesDate]) = DatePart("ww", Date()) and Year( [SalesDate]) = Year(Date()) |
傳回本週發生交易的記錄。 一週從星期日開始,並在星期六結束。 |
包含落在上週的日期 |
Year([SalesDate])* 53 + DatePart("ww", [SalesDate]) = Year(Date())* 53 + DatePart("ww", Date()) - 1 |
傳回上週發生交易的記錄。 一週從星期日開始,並在星期六結束。 |
包含落在下週的日期 |
Year([SalesDate])* 53+DatePart("ww", [SalesDate]) = Year(Date())* 53+DatePart("ww", Date()) + 1 |
傳回下週將發生交易的記錄。 一週從星期日開始,並在星期六結束。 |
包含落在前 7 天內的日期 |
Between Date() and Date()-6 |
傳回前 7 天發生交易的記錄。 如果今天的日期是 2/2/2006,會顯示 2006 年 1 月 24 日到 2006 年 2 月 2 日之間的記錄。 |
包含屬於本月的日期 |
Year([SalesDate]) = Year(Now()) And Month([SalesDate]) = Month(Now()) |
傳回本月的記錄。 如果今天的日期是 2/2/2006,會顯示 2006 年 2 月的記錄。 |
包含屬於上個月的日期 |
Year([SalesDate])* 12 + DatePart("m", [SalesDate]) = Year(Date())* 12 + DatePart("m", Date()) - 1 |
傳回上個月的記錄。 如果今天的日期是 2/2/2006,會顯示 2006 年 1 月的記錄。 |
包含屬於下個月的日期 |
Year([SalesDate])* 12 + DatePart("m", [SalesDate]) = 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([SalesDate]) = Year(Now()) And DatePart("q", Date()) = DatePart("q", Now()) |
傳回目前這一季的記錄。 如果今天的日期是 2/2/2006,會顯示 2006 年第一季的記錄。 |
包含屬於上一季的日期 |
Year([SalesDate])*4+DatePart("q",[SalesDate]) = Year(Date())*4+DatePart("q",Date())- 1 |
傳回上一季的記錄。 如果今天的日期是 2/2/2006,會顯示 2005 年最後一季的記錄。 |
包含屬於下一季的日期 |
Year([SalesDate])*4+DatePart("q",[SalesDate]) = Year(Date())*4+DatePart("q",Date())+1 |
傳回下一季的記錄。 如果今天的日期是 2/2/2006,會顯示 2006 年第二季的記錄。 |
包含落在今年的日期 |
Year([SalesDate]) = Year(Date()) |
傳回今年的記錄。 如果今天的日期是 2/2/2006,會顯示 2006 年的記錄。 |
包含屬於前一年的日期 |
Year([SalesDate]) = Year(Date()) - 1 |
傳回去年發生交易的記錄。 如果今天的日期是 2/2/2006,會顯示 2005 年的記錄。 |
包含屬於明年的日期 |
Year([SalesDate]) = Year(Date()) + 1 |
傳回明年日期發生交易的記錄。 如果今天的日期是 2/2/2006,會顯示 2007 年的記錄。 |
包含落在 1 月 1 日到今天之間的日期 (即年初至今的記錄) |
Year([SalesDate]) = Year(Date()) and Month([SalesDate]) <= Month(Date()) and Day([SalesDate]) <= Day (Date()) |
傳回落在今年 1 月 1 日到今天之間發生交易的記錄。 如果今天的日期是 2/2/2006,會顯示 2006 年 1 月 1 日到 2006 年 2 月 2 日之間的記錄。 |
包含過去的日期 |
< Date() |
傳回今天之前發生交易的記錄。 |
包含未來發生的日期 |
> Date() |
傳回今日之後將發生交易的記錄。 |
篩選出 Null 值 (即缺少值) |
Is Null |
傳回缺少交易日期的記錄。 |
篩選出非 Null 值 |
Is Not Null |
傳回已知交易日期的記錄。 |
適用於是/否欄位的準則
舉例來說,[客戶] 資料表有一個名為 [使用中] 的 [是/否] 欄位,用來表示客戶帳戶目前是否為使用中。 下表顯示如何評估在 [是/否] 欄位的 [準則] 資料列中所輸入的值。
欄位值 |
結果 |
---|---|
是、True、1 或 -1 |
針對 [是] 值進行測試。 當您輸入值 1 或 -1 之後,在 [準則] 資料列中會轉換為 [True]。 |
否、False 或 0 |
針對 [否] 值進行測試。 當您輸入值 1 之後,會在 [準則] 資料列中轉換為 [否]。 |
沒有值 (null) |
未測試 |
1、-1 或 0 以外的任何數字 |
如果這是欄位中唯一的準則值,則沒有結果 |
[是]、[否]、[True] 或 [False] 以外的任何字元字串 |
資料類型不相符的錯誤導致查詢無法執行 |
適用於其他欄位的準則
附件 在 [準則] 列中輸入 Is Null,加入不含任何附件的記錄。 輸入 Is Not Null,加入包含附件的記錄。
查閱欄位 查閱欄位有兩種類型:一種是用於查閱位於現有資料來源中的值 (藉由使用外部索引鍵),另一種是根據查閱欄位建立時所指定之值的清單。
根據指定值清單的查閱欄位屬於「文字」資料類型,且有效準則與其他文字欄位相同。
您在以來自現有資料來源的值為基礎的查閱欄位中可使用的準則,取決於外部索引鍵的資料類型,而非正在查閱之資料的資料類型。 例如,您可能有顯示員工名稱的查閱欄位,卻是使用 [數字] 資料類型的外部索引鍵。 因為欄位儲存的是數字而不是文字,所以您會使用適用於數字的準則;也就是 >2。
如果您不知道外部索引鍵的資料類型,可以在 [設計檢視] 中檢查來源資料表來判定欄位的資料類型。 步驟如下:
-
在 [瀏覽窗格] 中找出來源資料表。
-
以下列任一方式,在 [設計檢視] 中開啟資料表:
-
按一下資料表,然後按 CTRL+ENTER
-
以滑鼠右鍵按一下資料表,然後按一下 [設計檢視]。
-
-
每個欄位的資料類型會列在資料表設計格線的 [資料類型] 資料行中。
多重值欄位 多重值欄位中的資料會以資料列的形式儲存在 Access 建立及填入的隱藏資料表中,以代表欄位。 在查詢的 [設計檢視] 中,它是利用可展開的欄位在 [欄位清單] 中表示。 若要使用多重值欄位的準則,請為隱藏資料表的單一資料列提供準則。 方法如下:
-
建立含有多重值欄位的查詢,並在 [設計檢視] 中開啟它。
-
按一下多重值欄位旁邊的加號 (+) 來展開它;如果欄位已展開,則為減號 (-)。 就在欄位名稱下方,您會看到代表多重值欄位之單一值的欄位。 此欄位會與多重值欄位具有相同的名稱,但附加字串 .Value。
-
拖曳多重值欄位及其單一值欄位,以區隔設計格線中的資料行。 如果只想在結果中看到完整的多重值欄位,請清除單一值欄位的 [顯示] 核取方塊。
-
在單一值欄位的 [準則] 資料列中輸入準則,使用適用於值所表示之任何資料類型的準則。
-
系統隨即會使用您提供的準則,個別評估多重值欄位中的每個值。 例如,您可能有儲存數字清單的多重值欄位。 如果您提供準則 >5 AND <3,那麼至少有一個值大於 5 且一個值小於 3 的任何記錄皆符合該準則。