SQL Between, MySQL Between Dates, Not Between
SQL BETWEEN运算符与WHERE子句一起使用以提供一系列值。
这些值可以是数字值,文本值和日期。
SQL BETWEEN运算符几乎类似于按顺序使用的SQL IN运算符。
这些值定义为BETWEEN范围的一部分(包括端值),即该范围中提到的值包括在开始值和结束值处。
让我们详细讨论BETWEEN运算符。
如上所述,BETWEEN运算符可以与数字值,文本值和日期一起使用。
我们将在下面详细讨论所有三个。
语法之间的SQL
SELECT 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 | 2016-01-01 |
2 | Monica | F | 12 | 88 | 2016-01-31 |
3 | Jessica | F | 13 | 84 | 2016-01-15 |
4 | Tom | M | 11 | 78 | 2016-12-15 |
我正在使用MySQL数据库,这是用于在Student表中创建和插入示例记录的脚本。
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, '2016-01-01'), (2, 'Monica', 'F', 12, 88, '2016-01-31'), (3, 'Jessica', 'F', 13, 84, '2016-01-15'), (4, 'Tom', 'M', 11, 78, '2016-12-15');
方案:获取11岁至13岁之间的学生百分比。
SELECT StudentPercent FROM Student WHERE StudentAge BETWEEN 11 AND 13;
输出:
StudentPercent |
---|
88 |
84 |
78 |
SQL NOT BETWEEN数值运算符
SQL NOT BETWEEN运算符用于获取作为结果集一部分的值,该值超出BETWEEN运算符指定的范围。
方案:获取年龄在11到13岁之间的学生所占的百分比
SELECT StudentPercent FROM Student WHERE StudentAge NOT BETWEEN 11 AND 13;
输出:
StudentPercent |
---|
85 |
SQL BETWEEN文本值运算符
场景:获取RollNo,StudentName和StudentAge,其中StudentName在George和Jessica之间。
SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName BETWEEN 'George' AND 'Jessica';
输出:
RollNo | StudentName | StudentAge |
---|---|---|
1 | George | 14 |
3 | Jessica | 13 |
SQL NOT BETWEEN文本值运算符
场景:获取RollNo,StudentName和StudentAge,其中StudentName不在George和Jessica之间。
SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName NOT BETWEEN 'George' AND 'Jessica';
输出:
RollNo | StudentName | StudentAge |
---|---|---|
2 | Monica | 12 |
4 | Tom | 11 |
SQL BETWEEN运算符的日期值
场景:获取2016年1月1日至2016年1月31日之间入学的学生年龄。
SELECT StudentAge FROM Student WHERE admissiondate BETWEEN str_to_date('2016-01-01', '%Y-%m-%d') AND '2016-01-31';
输出:
StudentAge |
---|
14 |
12 |
13 |
请注意,我正在使用MySQL本机函数str_to_date
将字符串转换为日期。
如果字符串是默认格式,我们也可以按原样使用它,就像我在第二个参数中使用的一样。
如果您使用的是Oracle DB,则对应的函数为TO_DATE。
SQL NOT BETWEEN日期值运算符
场景:获取不在2016年1月1日至2016年1月31日之间入学的学生的年龄。
SELECT StudentAge FROM Student WHERE admissiondate NOT BETWEEN str_to_date('2016-01-01', '%Y-%m-%d') AND '2016-01-31';
输出:
StudentAge |
---|
11 |
运算符之间有多个
我们也可以在运算符之间使用多个。
其语法为:
SELECT Column(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 AND column_name BETWEEN value3 and value4 ... AND BETWEEN column_name BETWEEN valueN and valueM;
使用上述语法,我们可以使用多个BETWEEN运算符。
场景:获取年龄在10到13岁之间且分数在80到85之间的学生姓名。
SELECT StudentName FROM Student WHERE StudentAge BETWEEN 10 AND 13 AND StudentPercent BETWEEN 80 AND 85;