查询条件帮助定位 Access 数据库中的特定项。 如果某项匹配所输入的所有条件,它将出现在查询结果中。
若要将条件添加到 Access 查询,请在设计视图中打开查询并确定要为其指定条件的字段(列)。 如果该字段不在设计网格中,请双击字段将其添加到设计网格,然后在该字段的“条件”行中输入条件。 如果不确定如何操作,请参阅查询简介。
查询条件是一个表达式,Access 用它与查询字段值相比较以确定是否包括含有每个值的记录。 例如,Access 在查询中可以将表达式 = "Chicago" 与文本字段中的值进行比较。 如果给定记录中该字段的值为 "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.结果仅包含同时满足两个条件的记录。
如果只想满足以上其中一个条件呢? 换言之,如果有备选条件,该如何输入?
如果有备选条件(即满足两组独立条件中的一组即可),请同时使用设计网格中“条件”和“或”行。
1. 在“条件”行中指定 City 条件。
2. 在“或”行中指定 BirthDate 条件。
使用 OR 运算符组合在“条件”和“或”行中指定的条件,如下所示:
City = "Chicago" OR BirthDate < DateAdd (" yyyy ", -40, Date())
如果你需要指定更多的备选方法,请使用“或”行下方的行。
继续浏览示例前,请注意以下事项:
-
如果条件为临时条件或经常变化,则可以筛选查询结果,而无需频繁修改查询条件。 筛选器是一种临时条件,它会更改查询结果而不会改变查询设计。 有关筛选器的详细信息,请参阅文章应用筛选器以查看 Access 数据库中的选择记录。
-
如果条件字段不变,但你感兴趣的值经常变化,则可以创建参数查询。 参数查询将提示用户输入字段值,然后使用这些值创建查询条件。 有关参数查询的详细信息,请参阅在查询和报表中使用参数一文。
文本、备忘录和超链接字段的条件
下面的示例适用于基于存储联系人信息的表的查询中的 CountryRegion 字段。 在设计网格中该字段的“条件”行中指定条件。
默认情况下,为超链接字段指定的条件用于字段值的显示文本部分。 若要为值的目标统一资源定位器 (URL) 部分指定条件,请使用 HyperlinkPart 表达式。 该表达式的语法如下:HyperlinkPart([Table1].[Field1],1) = "http://www.microsoft.com/",其中 Table1 是包含超链接字段的表的名称,Field1 为超链接字段,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 字段中可能包含空白值。 |
不包含零长度字符串 |
Not "" |
返回 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", [销售日期]) = 12 |
返回发生在任意年份的 12 月的交易的记录。 |
包含特定季度(与年份无关)中的某个日期,如第一季度 |
DatePart("q", [销售日期]) = 1 |
返回发生在任意年份的第一季度的交易的记录。 |
包含今天的日期 |
Date() |
返回发生在当前日期的交易的记录。 如果当前日期为 2006 年 2 月 2 日,你将看到 OrderDate 字段设置为 2006 年 2 月 2 日的记录。 |
包含昨天的日期 |
Date()-1 |
返回发生在当前日期前一天的交易的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年 2 月 1 日的记录。 |
包含明天的日期 |
Date() + 1 |
返回发生在当前日期后一天的交易的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年 2 月 3 日的记录。 |
包含当前星期内的日期 |
DatePart("ww", [销售日期]) = DatePart("ww", Date()) and Year( [销售日期]) = Year(Date()) |
返回发生在当前星期之内的交易的记录。 每个星期从星期日开始,到星期六结束。 |
包含前一个星期内的日期 |
Year([销售日期])* 53 + DatePart("ww", [销售日期]) = Year(Date())* 53 + DatePart("ww", Date()) - 1 |
返回发生在上一个星期之内的交易的记录。 每个星期从星期日开始,到星期六结束。 |
包含下一个星期内的日期 |
Year([销售日期])* 53+DatePart("ww", [销售日期]) = Year(Date())* 53+DatePart("ww", Date()) + 1 |
返回发生在下一周的交易的记录。 每个星期从星期日开始,到星期六结束。 |
包含过去 7 天内的日期 |
Between Date() and Date()-6 |
返回发生在过去 7 天之内的交易的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年 1 月 24 日到 2006 年 2 月 2 日期间的记录。 |
包含属于当前月份的日期 |
Year([销售日期]) = Year(Now()) And Month([销售日期]) = Month(Now()) |
返回当前月份记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年 2 月的记录。 |
包含属于上个月的日期 |
Year([销售日期])* 12 + DatePart("m", [销售日期]) = Year(Date())* 12 + DatePart("m", Date()) - 1 |
返回上个月的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年 1 月的记录。 |
包含属于下个月的日期 |
Year([销售日期])* 12 + DatePart("m", [销售日期]) = Year(Date())* 12 + DatePart("m", Date()) + 1 |
返回下个月的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年 3 月的记录。 |
包含过去 30 或 31 天内的日期 |
Between Date( ) And DateAdd("M", -1, Date( )) |
相当于一个月的销售记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年 1 月 2 日到 2006 年 2 月 2 日期间的记录。 |
包含属于当前季度的日期 |
Year([销售日期]) = Year(Now()) And DatePart("q", Date()) = DatePart("q", Now()) |
返回当前季度的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年的第一季度的记录。 |
包含属于上一个季度的日期 |
Year([销售日期])*4+DatePart("q",[销售日期]) = Year(Date())*4+DatePart("q",Date())- 1 |
返回上一季度的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2005 年最后一季度的记录。 |
包含属于下一个季度的日期 |
Year([销售日期])*4+DatePart("q",[销售日期]) = Year(Date())*4+DatePart("q",Date())+1 |
返回下一季度的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年第二季度的记录。 |
包含属于当前年份的日期 |
Year([销售日期]) = Year(Date()) |
返回当前年份记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年的记录。 |
包含属于上一年的日期 |
Year([销售日期]) = Year(Date()) - 1 |
返回发生在上一年的交易的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2005 年的记录。 |
包含属于下一年的日期 |
Year([销售日期]) = Year(Date()) + 1 |
返回发生在下一年的交易的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2007 年的记录。 |
包含 1 月 1 日到目前(年份到日期记录)之间的日期 |
Year([销售日期]) = Year(Date()) and Month([销售日期]) <= Month(Date()) and Day([销售日期]) <= Day (Date()) |
返回交易日期介于当年 1 月 1 日和今天之间的交易的记录。 如果当前日期为 2006 年 2 月 2 日,则你将看到 2006 年 1 月 1 日到 2006 年 2 月 2 日期间的记录。 |
包含发生在过去的日期 |
< Date() |
返回发生在今天之前的交易的记录。 |
包含未来的日期 |
> Date() |
返回发生在今天之后的交易的记录。 |
筛选 Null 值(即缺少值) |
Is Null |
返回交易日期缺失的记录。 |
筛选非 Null 值 |
Is Not Null |
返回交易日期已知的记录。 |
是/否字段的条件
例如,您的“客户”表中有一个“是/否”字段,其名称为“活动”,用于指示客户的帐户当前是否处于活动状态。 下表显示了如何计算“是/否”字段的“条件”行中输入的值。
字段值 |
结果 |
---|---|
Yes、True、1 或 -1 |
针对 Yes 值进行过测试。 值 1 或 -1 在输入之后,在“条件”行中转换为“True”。 |
No、False 或 0 |
针对 No 值进行过测试。 值 0 在输入之后,在“条件”行中转换为“False”。 |
无值(空) |
未经过测试 |
除 1、-1 或 0 之外的任何数字 |
如果它是字段中的唯一条件值,则无结果 |
除 Yes、No、True 或 False 之外的任何字符串 |
数字类型不匹配错误导致查询无法运行 |
其他字段的条件
附件 在“条件”行中,键入 Is Null 以包含无任何附件的记录。 键入 Is Not Null 以包含有附件的记录。
查找字段 有两种类型的 Lookup 字段:(通过使用外键)在现有数据源中查找值的字段,以及基于创建 Lookup 字段时指定的值列表的字段。
基于指定值的列表的 Lookup 字段为文本数据类型,有效条件与其他文本字段相同。
你可以在基于来自现有数据源的值的 Lookup 字段中使用的条件取决于外键的数据类型,而不是被查找的数据的数据类型。 例如,你可以拥有显示雇员姓名的 Lookup 字段,但使用数字数据类型的外键。 由于该字段存储数字而不是文本,所以请使用适用于数字的条件;即 >2。
如果你不知道的外键的数据类型,可以在设计视图中检查源表以确定的该字段的数据类型。 为此,请执行以下操作:
-
在“导航窗格”中找到源表。
-
在设计视图中打开该表:
-
单击该表,然后按 CTRL+ENTER
-
右键单击该表,然后单击“设计视图”。
-
-
该表设计网格的“数据类型”列中列出了每个字段的数据类型。
多值字段 多值字段中的数据存储为隐藏表中的行,Access 中创建并填充该表以表示字段。 在查询设计视图中,使用可展开字段在“字段列表”中表示它。 若要为多值字段使用条件,请为隐藏表中的单个行提供条件。 为此,请执行以下操作:
-
创建包含该多值字段的查询,然后在设计视图中打开它。
-
单击多值字段旁边的加号 (+) 以展开它;如果该字段已展开,此符号为减号 (-)。 字段名称的正下方将显示表示多值字段单值的字段。 此字段与多值字段具有相同的名称,且追加了字符串 .Value。
-
拖动多值字段及其单值字段以分隔设计网格中的列。 如果想在结果中仅查看完整的多值字段,请清除单值字段的“显示”复选框。
-
在单值字段的“条件”行中键入条件,使用适用于这些值所表示的数据类型的条件。
-
将使用所提供的条件单独计算多值字段中的每个值。 例如,假设有一个存储数字列表的多值字段。 如果提供的条件为 >5 AND <3,则其中有至少一个大于 5 的值且有一个小于 3 的值的任何记录都将匹配。