SQL Between用法详解:MySQL日期范围查询与Not Between实例教程
SQL的BETWEEN运算符与WHERE子句一起使用,用于选择指定范围内的数据。这些值可以是数字、文本和日期。SQL BETWEEN运算符与SQL IN运算符类似,但它是按顺序使用的。BETWEEN范围定义的值是包含性的,即范围内提到的值包括开始值和结束值。下面我们将详细讨论BETWEEN运算符。如前所述,BETWEEN运算符可以与数字、文本和日期一起使用。我们将在下面详细讨论这三种情况。
SQL BETWEEN 语法
SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;
使用上述语法,我们可以将值定义为BETWEEN运算符的一部分。此外,无论使用数值、文本值还是日期值,上述语法都保持不变。
SQL BETWEEN 操作符用于数字值
通过一些数值示例,我们将更详细地理解上述语法。让我们以以下学生表为例。
学号 | 学生姓名 | 学生性别 | 学生年龄 | 学生成绩 | 入学日期 |
---|---|---|---|---|---|
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数据库,以下是创建学生表并插入示例记录的脚本:
CREATE TABLE `Student` (
`rollno` int(11) unsigned NOT NULL,
`studentname` varchar(20) DEFAULT NULL,
`studentgender` varchar(5) DEFAULT NULL,
`studentage` int(3) DEFAULT NULL,
`studentpercent` int(3) DEFAULT NULL,
`admissiondate` date DEFAULT NULL,
PRIMARY KEY (`rollno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `Student` (`rollno`, `studentname`, `studentgender`, `studentage`, `studentpercent`, `admissiondate`)
VALUES
(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');
场景:查询年龄在11到13岁之间的学生的百分比。
SELECT StudentPercent FROM Student WHERE StudentAge BETWEEN 11 AND 13;
输出结果:
学生成绩 |
---|
88 |
84 |
78 |

数字值的SQL NOT BETWEEN操作符
SQL NOT BETWEEN运算符用于获取结果集中不在BETWEEN运算符指定范围内的值。场景:查询年龄不在11到13岁之间的学生的百分比。
SELECT StudentPercent FROM Student WHERE StudentAge NOT BETWEEN 11 AND 13;
结果:
学生成绩 |
---|
85 |

SQL BETWEEN 运算符用于文本值
场景:查询学号(RollNo)、学生姓名(StudentName)和学生年龄(StudentAge),其中学生姓名在George和Jessica之间。
SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName BETWEEN 'George' AND 'Jessica';
输出结果:
学号 | 学生姓名 | 学生年龄 |
---|---|---|
1 | George | 14 |
3 | Jessica | 13 |
SQL NOT BETWEEN 运算符用于文本值
场景:查询学号(RollNo)、学生姓名(StudentName)和学生年龄(StudentAge),其中学生姓名不在George和Jessica之间。
SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName NOT BETWEEN 'George' AND 'Jessica';
输出:
学号 | 学生姓名 | 学生年龄 |
---|---|---|
2 | Monica | 12 |
4 | Tom | 11 |
SQL BETWEEN 运算符用于日期值
场景:查询入学日期在2018年1月1日至2018年1月31日之间的学生年龄。
SELECT StudentAge FROM Student WHERE admissiondate BETWEEN str_to_date('2018-01-01', '%Y-%m-%d') AND '2018-01-31';
输出结果:
学生年龄 |
---|
14 |
12 |
13 |

SQL NOT BETWEEN 运算符用于日期值
场景:查询不在2018年1月1日至2018年1月31日期间入学的学生的年龄。
SELECT StudentAge FROM Student WHERE admissiondate NOT BETWEEN str_to_date('2018-01-01', '%Y-%m-%d') AND '2018-01-31';
输出结果:
学生年龄 |
---|
11 |
多个BETWEEN操作符
我们也可以使用多个BETWEEN运算符。其语法如下:
SELECT 列名 FROM 表名 WHERE
列名 BETWEEN 值1 AND 值2
AND
列名 BETWEEN 值3 AND 值4
...
AND
列名 BETWEEN 值N AND 值M;
使用上述语法,我们可以组合多个BETWEEN运算符。场景:查询年龄在10到13岁之间,且成绩在80至85之间的学生姓名。
SELECT StudentName FROM Student WHERE
StudentAge BETWEEN 10 AND 13
AND
StudentPercent BETWEEN 80 AND 85;
