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-012021-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_time2021-02-21 的所有数据,即2021-02-01 00:00:002021-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_time2021-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 ...的更多相关文章

  1. 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出同一表中的某些值 ...

  2. MySql中in和exists效率

    mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询.一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的 ...

  3. [原创]MYSQL中利用外键实现级联删除和更新

    MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定 ...

  4. mysql中的多行查询结果合并成一个

    SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 ...

  5. 【转】MySql中的函数

    原文:http://www.cnblogs.com/kissdodog/p/4168721.html MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: ...

  6. sqlserver 中数据导入到mysql中的方法以及注意事项

    数据导入从sql server 到mysql (将数据以文本格式从sqlserver中导出,注意编码格式,再将文本文件导入mysql中): 1.若从slqserver中导出的表中不包含中文采用: bc ...

  7. MySQL中有关TIMESTAMP和DATETIME的总结

    一.MySQL中如何表示当前时间? 其实,表达方式还是蛮多的,汇总如下: CURRENT_TIMESTAMP CURRENT_TIMESTAMP() NOW() LOCALTIME LOCALTIME ...

  8. MySQL中索引和优化的用法总结

    1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的 ...

  9. B-Tree索引在sqlserver和mysql中的应用

    在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实并没有真正理解索引,也没有搞清楚索引为什么就能加快检索速度,以至于在实践中并不能很好的应用索引.事实上,索引是一种廉价而且十分有效的优化手 ...

  10. MySQL中CURRENT_TIMESTAMP(转)

    1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()  代码如下   mysql> select current_timestamp ...

随机推荐

  1. Python_jsonPath模块的使用

    jsonpath简介 如果有一个多层嵌套的复杂字典,想要根据key批量提取value,还是比较繁琐的.jsonPath模块就能解决这个痛点,接下来我们来学习一下jsonpath模块. 因为jsonpa ...

  2. python pathlib模块(面向对象的文件系统路径)

    该模块提供表示文件系统路径的类,其语义适用于不同的操作系统 导入Path类: 获取当前目录的绝对路径: 返回当前目录的路径对象 路径拼接 os与PurePath/Path函数映射表 来自为知笔记(Wi ...

  3. js中点击返回顶部

    window.scrollTo(0, 0);当点击返回顶部的时候调用这个方法即可 handleScrollTop(){ window.scrollTo(0, 0); }

  4. 学习Java爬虫文档的学习顺序整理

    1.认识正则表达式(Java语言基础) https://www.toutiao.com/i6796233686455943693/ 2.正则表达式学习之简单手机号和邮箱练习 https://www.t ...

  5. 嫌Excel VBA执行速度慢,这些建议你一定要看

    Excel是办公利器,这无需多言.尤其在办公室,Excel用的熟练与否,会的Excel知识点多不多,很大程度上决定了你工作是否高效,能否按时打卡下班.可我们也时常听到这样的吐槽:Excel好是好,可就 ...

  6. python测试框架-pytest

    一.pytest 介绍.运行.参数化和数据驱动.Fixture pytest安装与介绍 官网 : pip install -U pytest 查看版本号:pytest --version 为何选择py ...

  7. Solon Web 开发,八、校验、及定制与扩展

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  8. 网络流 HLPP 板子

    #include<bits/stdc++.h> using namespace std; const int MM=4e5+5,inf=0x3f3f3f3f; int n,m,s,t,to ...

  9. IoC容器-Bean管理XML方式(注入内部bean和级联赋值)

    注入属性-内部bean和级联赋值 (1)一对多关系:部分和员工 一个部门有多个员工,一个员工属于一个部门 部门是一,员工是多 (2)在实体类之间表示一对多关系 (3)在spring配置文件中进行配置 ...

  10. vue 项目npm run dev ip访问

    webpack npm run dev 不能通过ip访问 只能通过localhost访问 解决方法如下: 修改vue-cli: config/index.js 文件 把文件中 host 的值,改成 i ...