MySQL中 BETWEEN ... AND ...
MySQL中 BETWEEN ... AND ...
1. 准备测试数据
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`age` int(11) NOT NULL,
`create_time` datetime DEFAULT NULL,
`birthday` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB EFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `test`.`student`(`id`, `name`, `age`, `create_time`, `birthday`) VALUES
(1, 'Andy', 10, '2021-02-01 00:00:00', '2021-01-30'),
(2, 'Ben', 18, '2021-02-01 00:00:01', '2021-01-31'),
(3, 'Cindy', 18, '2021-02-01 12:01:54', '2021-02-01'),
(4, 'David', 18, '2021-02-01 23:59:59', '2021-02-02'),
(5, 'Cindy2', 18, '2021-02-02 00:00:00', '2021-02-03'),
(6, 'Cindy3', 19, '2021-02-02 00:00:01', '2021-02-28'),
(7, 'Cindy4', 19, '2021-11-22 12:19:33', '2021-02-28');
2. 如果列是date
类型,则 BETWEEN ... AND ...
包含左右区间
如:筛选 生日为2021-02-01
到 2021-02-02
的学生
写法1:SELECT * FROM student WHERE birthday BETWEEN '2021-02-01' AND '2021-02-02'
写法2:SELECT * FROM student WHERE birthday >= '2021-02-01' AND birthday <= '2021-02-02'
结果均为:
3. 如果列是datetime
类型,则需分情况讨论
3.1 如果传入的参数格式为datetime
格式,则仍包含左右区间
如:筛选 create_time
为2021-02-21
的所有数据,即2021-02-01 00:00:00
至 2021-02-01 23:59:59
写法1:SELECT * FROM student WHERE create_time BETWEEN '2021-02-01 00:00:00' AND '2021-02-01 23:59:59'
写法2:SELECT * FROM student WHERE create_time >= '2021-02-01 00:00:00' AND create_time <= '2021-02-01 23:59:59'
结果均为:
3.2 如果传入的格式是date
格式,此时需要注意一些边界情况
如:需求同上,筛选 create_time
为2021-02-21
的所有数据,但不指定时分秒:
SELECT * FROM student WHERE create_time BETWEEN '2021-02-01' AND '2021-02-01'
显然数据有误,只查出来 2021-02-01 00:00:00
的数据,出现这种现象的原因,就是因为如果针对datetime
列的字段做筛选,但输入的值却是date
类型的话,默认会自动追加00:00:00
因此,上一句SQL实际上会被自动转成如下格式:
SELECT * FROM student WHERE create_time BETWEEN '2021-02-01 00:00:00' AND '2021-02-01 00:00:00'
这才出现了只查询到2021-02-01 00:00:00
的数据的情况
MySQL中 BETWEEN ... AND ...的更多相关文章
- MySQL中You can't specify target table for update in FROM clause一场
mysql中You can't specify target table <tbl> for update in FROM clause错误的意思是说,不能先select出同一表中的某些值 ...
- MySql中in和exists效率
mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询.一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的 ...
- [原创]MYSQL中利用外键实现级联删除和更新
MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定 ...
- mysql中的多行查询结果合并成一个
SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 ...
- 【转】MySql中的函数
原文:http://www.cnblogs.com/kissdodog/p/4168721.html MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: ...
- sqlserver 中数据导入到mysql中的方法以及注意事项
数据导入从sql server 到mysql (将数据以文本格式从sqlserver中导出,注意编码格式,再将文本文件导入mysql中): 1.若从slqserver中导出的表中不包含中文采用: bc ...
- MySQL中有关TIMESTAMP和DATETIME的总结
一.MySQL中如何表示当前时间? 其实,表达方式还是蛮多的,汇总如下: CURRENT_TIMESTAMP CURRENT_TIMESTAMP() NOW() LOCALTIME LOCALTIME ...
- MySQL中索引和优化的用法总结
1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的 ...
- B-Tree索引在sqlserver和mysql中的应用
在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实并没有真正理解索引,也没有搞清楚索引为什么就能加快检索速度,以至于在实践中并不能很好的应用索引.事实上,索引是一种廉价而且十分有效的优化手 ...
- MySQL中CURRENT_TIMESTAMP(转)
1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp() 代码如下 mysql> select current_timestamp ...
随机推荐
- spring-Ioc(二)学习笔记
属性注入方式 设值注入:也就是set注入,通过setter方法注入 java Bean private ITestDao dao; public void setDao(ITestDao dao){ ...
- centos7 重定向符号
这篇只记录使用对应的使用方法,原理后期更新 >> 追加输出 <<追加输入 >输出 <输入 将正确和错误信息同事保留到一个文件 echo "this is ...
- C#进阶——从应用上理解异步编程的作用(async / await)
欢迎来到学习摆脱又加深内卷篇 下面是学习异步编程的应用 1.首先,我们建一个winfrom的项目,界面如下: 2.然后先写一个耗时函数: /// <summary> /// 耗时工作 // ...
- 关于APP设计规范和一些图层命名
首先,本人大学计算机专业出身,学过编程,工作的时候做过 产品经理,设计师,前端工程师,对工作的流程都有一些见解. 现在主攻前端工程师,做Web APP.今天收到设计师的设计稿,一看图层分类,这让我感觉 ...
- .Net 线程安全集合
.Net 提供了基于生产-消费模式的集合类,这些集合对多线程访问安全,定义在System.Collections.Concurrent名称空间中.这个名称空间中包括基础接口IProduceConsum ...
- Spring Security 接口认证鉴权入门实践指南
目录 前言 SpringBoot 示例 SpringBoot pom.xml SpringBoot application.yml SpringBoot IndexController SpringB ...
- Sentry 开发者贡献指南 - 数据库迁移
Django 迁移是我们处理 Sentry 中数据库更改的方式. Django 迁移官方文档:https://docs.djangoproject.com/en/2.2/topics/migratio ...
- Cesium入门1 - Cesium介绍
Cesium入门1 - Cesium介绍 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Cesium简介 Ce ...
- 巅峰对决之Swarm、Kubernetes、Mesos
另外一篇 https://www.sohu.com/a/157185937_287582 Docker Docker是一个主流容器管理工具,它是第一个基于Linux容器(LXC)的[2],但是现在被r ...
- 学习axios必知必会(2)~axios基本使用、使用axios前必知细节、axios和实例对象区别、拦截器、取消请求
一.axios的基本使用: ✿ 使用axios前必知细节: 1.axios 函数对象(可以作为axios(config)函数使用去发送请求,也可以作为对象调用方法axios.request(confi ...