SQL BETWEEN 运算符与 WHERE条款一起使用,以提供一个值范围。值可以是数值、文本值和日期。 SQL BETWEEN 运算符几乎与 SQL IN运算符相似,以序列的方式使用。值被定义为 BETWEEN 范围的一部分,即包含在范围内所提到的值在开始和结束值中。让我们详细讨论 BETWEEN 运算符。
同义词之间
1SELECT Column(s) FROM table_name WHERE column BETWEEN value1 AND value2;
使用上述语法,我们可以将值定义为 BETWEEN 运算器的一部分,并且上述语法对于使用数字值、文本值和日期值仍然相同。
SQL BETWEEN 数值运算器
我们将通过数值的几个示例更详细地理解上述语法. 让我们以以下学生表为示例的目的来考虑。
RollNo | StudentName | StudentGender | StudentAge | StudentPercent | AdmissionDate |
---|---|---|---|---|---|
1 | George | M | 14 | 85 | 2018-01-01 |
2 | Monica | F | 12 | 88 | 2018-01-31 |
3 | Jessica | F | 13 | 84 | 2018-01-15 |
4 | Tom | M | 11 | 78 | 2017-12-15 |
我正在使用MySQL数据库,这里是创建和插入学生表中的示例记录的脚本。
1CREATE TABLE `Student` (
2 `rollno` int(11) unsigned NOT NULL,
3 `studentname` varchar(20) DEFAULT NULL,
4 `studentgender` varchar(5) DEFAULT NULL,
5 `studentage` int(3) DEFAULT NULL,
6 `studentpercent` int(3) DEFAULT NULL,
7 `admissiondate` date DEFAULT NULL,
8 PRIMARY KEY (`rollno`)
9) ENGINE=InnoDB DEFAULT CHARSET=utf8;
10
11INSERT INTO `Student` (`rollno`, `studentname`, `studentgender`, `studentage`, `studentpercent`, `admissiondate`)
12VALUES
13 (1, 'George', 'M', 14, 85, '2018-01-01'),
14 (2, 'Monica', 'F', 12, 88, '2018-01-31'),
15 (3, 'Jessica', 'F', 13, 84, '2018-01-15'),
16 (4, 'Tom', 'M', 11, 78, '2017-12-15');
场景:获取学生年龄在11岁至13岁之间的百分比。
1SELECT StudentPercent FROM Student WHERE StudentAge BETWEEN 11 AND 13;
输出:
StudentPercent |
---|
88 |
84 |
78 |
SQL NOT BETWEEN 数值运算器
使用 SQL NOT BETWEEN 运算符来获取值作为结果集的一部分,这些值不在 BETWEEN 运算符所指定的范围之外。
1SELECT StudentPercent FROM Student WHERE StudentAge NOT BETWEEN 11 AND 13;
输出:
StudentPercent |
---|
85 |
SQL BETWEEN 操作器为文本值
** 场景**:获取RollNo、学生名和学生年龄,学生名位于乔治和杰西卡之间。
1SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName BETWEEN 'George' AND 'Jessica';
输出:
RollNo | StudentName | StudentAge |
---|---|---|
1 | George | 14 |
3 | Jessica | 13 |
SQL NOT BETWEEN 文本值运算器
** 场景**:获取学生名、学生名和学生年龄,学生名不在乔治和杰西卡之间。
1SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName NOT BETWEEN 'George' AND 'Jessica';
输出:
RollNo | StudentName | StudentAge |
---|---|---|
2 | Monica | 12 |
4 | Tom | 11 |
SQL BETWEEN 运算器为日期值
场景:获取2018年1月1日至2018年1月31日之间入学的学生的年龄。
1SELECT StudentAge FROM Student WHERE admissiondate BETWEEN str_to_date('2018-01-01', '%Y-%m-%d') AND '2018-01-31';
输出:
StudentAge |
---|
14 |
12 |
13 |
Note that I am using MySQL native function str_to_date
to convert string to date. If the string is in default format, we can use it as-is too, just as I have used for the second argument. If you are using Oracle DB, then corresponding function is TO_DATE
.
SQL NOT BETWEEN 日期值运算器
场景:获取学生的年龄,其入学时间不在2018年1月1日至2018年1月31日之间。
1SELECT StudentAge FROM Student WHERE admissiondate NOT BETWEEN str_to_date('2018-01-01', '%Y-%m-%d') AND '2018-01-31';
输出:
StudentAge |
---|
11 |
多个运营商之间
我们也可以使用多个操作员之间的语法,其语法是:
1SELECT Column(s) FROM table_name WHERE
2column_name BETWEEN value1 AND value2
3AND
4column_name BETWEEN value3 and value4
5...
6AND
7BETWEEN column_name BETWEEN valueN and valueM;
使用上述语法,我们可以使用多个 BETWEEN 运算符。 ** 场景**:获取学生名称,年龄在 10 到 13 岁之间,标记在 80 到 85 个百分点之间。
1SELECT StudentName FROM Student WHERE
2StudentAge BETWEEN 10 AND 13
3AND
4StudentPercent BETWEEN 80 AND 85;
Output: