使用between and查找时间范围时的日期边界问题

最近在一个项目的后台数据库查找中,需要根据表中的时间字段查找某一范围内的数据(7天、15天、30天),这时我想用between and(其实使用DateDiff函数就可以完成,详情请看另一片文章:SQL查询今天、昨天、7天内、30天),但我对于between and查找时间范围时的边界问题不是特别清楚,所以在网上查找了相关资料,在这儿做个简单的记录。

首先要了解between操作符的用法,操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

SQL中的BETWEEN 语法

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

例如: 

//SELECT * FROM 表名 WHERE 日期字段名 BETWEEN '20170101020304' AND '20170101020304'
SELECT * FROM student_info WHERE `createDate` between '20170101020304' and '20180101020304'    
 //等同于:
SELECT * FROM student_info WHERE `createDate` >= '20170101020304' and `createDate` <= '20180101020304'

需要注意的是

不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。

所以,请检查你的数据库是如何处理 BETWEEN....AND 操作符的!

一般情况

SQL Server中 between and是包括边界值的,not between不包括边界值,不过如果使用between and 限定日期需要注意,如果and后的日期是到天的,那么默认为00:00:00 例如:and 后的日期为2017年04月06日,就等价于2017-04-06 00:00:00 ,那么2017-04-06 15:10:34的数据就差不到了,需要进行to_char处理。

参考资料:

关于sql语句between and的边界问题

你可能感兴趣的:(DataBase)