1.测试数据
DROP TABLE IF EXISTS `access_log`;
CREATE TABLE `access_log` (
`aid` int(11) NOT NULL AUTO_INCREMENT,
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '网站id',
`count` int(11) NOT NULL DEFAULT '0' COMMENT '访问次数',
`date` date NOT NULL,
PRIMARY KEY (`aid`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
INSERT INTO `access_log` VALUES ('1', '1', '45', '2016-05-10'), ('2', '3', '100', '2016-05-13'), ('3', '1', '230', '2016-05-14'), ('4', '2', '10', '2016-05-14'), ('5', '5', '205', '2016-05-14'), ('6', '4', '13', '2016-05-15'), ('7', '3', '220', '2016-05-15'), ('8', '5', '545', '2016-05-16'), ('9', '3', '201', '2016-05-17');
2.实践
1.如果想去访问次数大于45,小于150的网站ID,我想大多数会使用下面语句
SELECT site_id,count FROM `access_log` WHERE 45<=count<=150
结果为:
并不是我们想要的结果
正确的语法为:
1.SELECT site_id,count FROM `access_log` WHERE 45<=count AND count<=150
2.SELECT site_id,count FROM `access_log` WHERE count BETWEEN 45 AND 150
结果为:
结果正确
在其他语言中,例如:php
使用4<=$a<=6来表示大于而且小于是不准确的,需要使用4<=$a&&$a<=6
3.between介绍
SQL BETWEEN 操作符
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
请注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!
在某些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括两个测试值的字段。
在某些数据库中,BETWEEN 选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。
因此,请检查您的数据库是如何处理 BETWEEN 操作符!
1.日期使用
SELECT * FROM access_log WHERE date BETWEEN '2016-05-10' AND '2016-05-14'
或者 SELECT * FROM `access_log` WHERE Day(date) BETWEEN 10 AND 14
当需要筛选月的时候可以用Month(),年就用Year()
结果如下: