SQL Between, MySQL Between Dates, Not Between

时间:2020-02-23 14:32:23  来源:igfitidea点击:

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运算符的数值

我们将通过一些数值示例来更详细地了解上述语法。

让我们考虑以下学生表格作为示例。

RollNoStudentNameStudentGenderStudentAgeStudentPercentAdmissionDate
1GeorgeM14852016-01-01
2MonicaF12882016-01-31
3JessicaF13842016-01-15
4TomM11782016-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';

输出:

RollNoStudentNameStudentAge
1George14
3Jessica13

SQL NOT BETWEEN文本值运算符

场景:获取RollNo,StudentName和StudentAge,其中StudentName不在George和Jessica之间。

SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName NOT BETWEEN 'George' AND 'Jessica';

输出:

RollNoStudentNameStudentAge
2Monica12
4Tom11

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;