SQL BETWEEN 操作符

SQL BETWEEN 操作符用于显示值在给定值之间的记录(或行)。它允许指定范围的下限和上限。BETWEEN 操作符检查列值是否在此范围(下限和上限)内,如果在此范围内,则将该行包含在结果集中。

在服务器中,我们在 WHERE 子句中使用此 BETWEEN 操作符来过滤 SELECT 语句返回的结果集。本文将通过数字、字符串和日期列的多个示例来解释 SQL Server BETWEEN 和 NOT BETWEEN 操作符。

SQL Server BETWEEN 操作符示例:如果您想查找 2015 年 5 月 18 日至 2015 年 6 月 19 日的销售额。或者,如果您想让 Amazon 网站显示价格范围在 1000 到 2500 之间的产品,那么在内部,我们必须使用此操作符。

SQL Server BETWEEN 操作符语法

BETWEEN 操作符获取特定范围内记录的基本语法如下

SELECT Column(s)
FROM [Source]
WHERE [Column Name] BETWEEN Value1 AND Value2

在上述语法中,column(s) 表示您希望在结果集中显示的原表或表格中所需的列名。[Column Name] 表示您希望过滤上述结果集的列。接下来,Value1 和 Value2 表示范围的下限和上限。在这里,SQL BETWEEN 操作符检查 [Column Name] 的行值是否在 Value1 和 Value2 之间。如果为 True,则该记录将被添加到结果集中。

注意:[Column Name] 的数据类型必须与范围值(Value1 和 Value2)的数据类型匹配,以避免意外结果。

我们还可以使用比较操作符编写上述 BETWEEN 操作符语句。如您所见,通过添加 >= 和 <= 操作符,Value1 和 Value2 都包含在查询结果中。

SELECT Column(s)
FROM [Source]
WHERE [Column Name] >= Value1 AND [Column Name] <= Value2

SQL BETWEEN 操作符示例

BETWEEN 操作符的结果集包括范围的下限 (Value1) 和上限 (Value2)。假设 [Column Name] 的记录等于 Value1 或 Value2。在这种情况下,BETWEEN 操作符会将其视为在范围内并包含在结果中。例如,Value1 = 1 且 Value2 = 5;结果包括 1 和 5。

对于此 BETWEEN 操作符和 NOT 示例,我们将使用 DELETE 语句 文章中提到的 Employee 表。请参阅该文章以查看数据。

SQL BETWEEN 操作符作用于数字或整数

您可以在数字或整数列上使用此操作符来过滤和提取数字范围内的记录。有时,我们必须查找特定范围内的销售额或订单。在另一种情况下,我们需要客户落在特定范围内,员工在 a 和 b 之间。为了处理这些情况,我们可以使用 BETWEEN 操作符。

以下 SQL BETWEEN 操作符查询查找 Employee 表中所有 [Yearly Income] 在 60000 到 70000 之间的员工。

SELECT [EmpID],[FirstName],[LastName],[Education]
,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE [YearlyIncome] BETWEEN 60000 AND 70000

浮点数或小数示例

以下示例返回所有销售额在 2500.00 到 3500.50 之间的员工。

SELECT [EmpID],[FirstName],[LastName],[Education]
,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE Sales BETWEEN 2500.00 AND 3500.50

SQL BETWEEN 操作符作用于字符串

它还允许您在字符串列上使用 BETWEEN 操作符,以使用文本数据过滤结果集。例如,此操作符对于提取特定字母范围内的客户或产品非常有用。

以下 BETWEEN 操作符查询将查找所有现有员工,其姓氏在 Carlson 和 Huang 之间。在这里,操作符遵循英文字母顺序,并查找姓氏列的第一个字母。如果第一个字母在 C 和 H 之间,则该特定行将添加到结果集中。

SELECT [EmpID],[FirstName],[LastName],[Education]
,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE [LastName] BETWEEN 'Carlson' AND 'Huang'
ORDER BY [LastName]

我们可以在 服务器 BETWEEN 操作符中使用单个字符,而不是编写完整的名称。例如,通过放置第一个字母,您可以在不提及完整名称 Carlson 和 Ruiz 的情况下编写上述查询。

以下示例检查员工的名字是否以 B、C、D、E、F 和 G 开头(不包括在内)。如果它在 B 和 R 之间,它会检查剩余的 H、I、J、K、L、M、N、O、P、Q 和 R,并返回满足条件的记录。

SELECT [EmpID],[FirstName],[LastName],[Education]
,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE [FirstName] BETWEEN 'B' AND 'G'
ORDER BY [FirstName]

提示:您也可以在 WHERE 子句 中使用 通配符,而不是单个字符——例如 C% 和 R%。

字符串长度示例

除了将字符串文本作为过滤条件之外,您还可以使用字符串函数和 SQL BETWEEN 操作符的组合。例如,如果您想检索特定长度的产品名称或描述,可以使用 LEN() 函数

以下查询返回所有 Education 列值长度(总字符数)在 6 到 10 之间的员工。

SELECT [EmpID],[FirstName],[LastName],[Education]
,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE LEN([Education]) BETWEEN 6 AND 10
SQL BETWEEN Operator on Numbers and Integer Columns

SQL BETWEEN 操作符与日期和时间

BETWEEN 操作符的真正强大之处在于它能够处理单个日期和时间以及日期和时间的组合。最常见的场景是通过放置开始和结束日期来查找圣诞节期间的销售额。另一个例子是分析特定时间范围内的事件。

以下查询返回所有 Hire Date 在 '2010-08-12' 和 '2013-01-15' 之间的员工。

SELECT [EmpID],[FirstName],[LastName],[Education]
,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE [HireDate] BETWEEN '2010-08-12' AND '2013-01-15'

在上面的示例中,我们使用了日期的精确复制格式。但是,您也可以尝试标准格式。以下查询返回所有 Hire Date 在 '20120101' 和 '20131231' 之间的员工,格式为 YYYYMMDD。

SELECT [EmpID],[FirstName],[LastName],[Education]
,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE [HireDate] BETWEEN '20120101' AND '20131231'

SQL Server NOT BETWEEN 操作符

我们还可以使用 NOT 关键字和 BETWEEN 操作符来从结果集中排除特定范围的记录。NOT BETWEEN 操作符的语法如下。

SELECT column(s)
FROM Table
WHERE col_name NOT BETWEEN Value1 AND Value2

为了更好地理解它,让我向您展示几个 NOT BETWEEN 操作符的示例。

NOT BETWEEN 数字示例

以下 SQL 操作符查询将查找表中所有 [Yearly Income] 不在 50000 到 90000 之间的员工。从查询中删除 NOT 关键字将返回收入在 50000 到 90000 范围内的员工。

SELECT * FROM [Employee]
WHERE [YearlyIncome] NOT BETWEEN 50000 AND 90000

字符串列示例

以下查询返回姓氏不在 'C' 和 'V' 英文字母字符之间的员工。

SELECT * FROM [Employee]
WHERE [LastName] NOT BETWEEN 'C' AND 'V'

NOT BETWEEN 日期和时间示例

以下查询使用 YEAR() 函数 从 HireDate 列中提取年份数字。接下来,SQL Server NOT BETWEEN 操作符将返回所有入职年份不在 2006 年和 2012 年之间的员工。删除 NOT 关键字将返回 2006 年至 2012 年入职的员工,无论月份和日期。

SELECT * FROM [Employee]
WHERE YEAR([HireDate]) NOT BETWEEN 2006 AND 2012
SQL BETWEEN Operator on String Columns

将 SQL BETWEEN 操作符与其他操作符结合使用

要创建复杂的条件或应用精确的过滤,您必须将此 BETWEEN 操作符与一个或多个操作符结合使用。例如,我们需要特定产品颜色的假日季节销售额。在这种情况下,您必须在 BETWEEN 操作符内部使用假日季节的开始和结束日期,并使用逻辑 AND 连接另一个条件。接下来,等于操作符 (product = 'Red') 将进一步过滤属于红色产品。

以下查询返回所有 2009 年至 2014 年入职的员工,并且他们的销售额必须超过 1000。

SELECT [EmpID],[FirstName],[LastName],[Education]
      ,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE YEAR([HireDate]) BETWEEN '2009' AND '2014'
AND Sales > 1000

假设您将 AND 替换为 OR 操作符。在这种情况下,如果员工在 2009 年至 2014 年之间入职,或者他们的销售额大于 10000,它将返回员工。如果任一条件为真,它将该记录添加到结果集中。

SQL BETWEEN 操作符和 IN 操作符

BETWEEN 操作符返回范围内的记录,而 IN 操作符 返回属于多个给定值的记录。因此,结合 BETWEEN 和 IN 操作符可以更灵活地以复杂的方式过滤数据,服务器允许您这样做。

假设表中有 100 种产品每天都有销售。您想查看一些产品(椅子、桌子、沙发)和特定时间范围(2018 年至 2023 年)内的销售信息。在这种情况下,您可以使用 YEAR(Date) 获取年份,SQL BETWEEN 操作符提取 2018 年至 2023 年的产品销售额。接下来,使用 AND 操作符连接以下条件,即 IN 操作符与(椅子、桌子和沙发),以仅带来这些产品。

以下查询返回所有职业是管理或专业,且销售额必须在 500.00 到 3500.00 之间的员工。

SELECT [EmpID],[FirstName],[LastName],[Education]
      ,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE Sales BETWEEN 500.00 AND 3500.00
AND Occupation IN('Management',  'Professional')

NOT BETWEEN 和 NOT IN 操作符

NOT BETWEEN 操作符排除给定范围内的值,而 NOT IN 操作符 过滤与括号 () 中任何给定值不匹配的值。

以下查询返回所有学历既不是学士也不是高中的员工,并且他们的销售额不应在 500.00 到 3500.00 的范围内。

SELECT [EmpID],[FirstName],[LastName],[Education]
      ,[Occupation],[YearlyIncome],[Sales],[HireDate]
FROM [Employee]
WHERE Sales NOT BETWEEN 500.00 AND 3500.00
AND Occupation NOT IN('Bachelors',  'High School')
SQL NOT BETWEEN Operator on Date and Time Columns

评论已关闭。