mysql between 空值_mysql中between关键字避免踩坑
创建一张测试表,并写入测试数据CREATE TABLE `t_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into t_test(create_time) values
('2020-02-26 00:00:00'),
('2020-02-26 23:59:59'),
('2020-02-27 00:00:00'),
('2020-02-27 02:59:59'),
('2020-02-27 23:59:59'),
('2020-02-28 00:00:00'),
('2020-02-28 00:00:00'),
('2020-02-28 02:59:59'),
('2020-02-28 08:59:59');
按精确到秒的方式进行between查询mysql> select * from t_test where create_time between '2020-02-27 00:00:00' and '2020-02-28 00:00:00';
+----+---------------------+
| id | create_time |
+----+---------------------+
| 3 | 2020-02-27 00:00:00 |
| 4 | 2020-02-27 02:59:59 |
| 5 | 2020-02-27 23:59:59 |
| 6 | 2020-02-28 00:00:00 |
| 7 | 2020-02-28 00:00:00 |
+----+---------------------+
5 rows in set (0.00 sec)
可以看到between是两端都包含的语义
按照日期范围between查询mysql> select * from t_test where create_time between '2020-02-27' and '2020-02-28';
+----+---------------------+
| id | create_time |
+----+---------------------+
| 3 | 2020-02-27 00:00:00 |
| 4 | 2020-02-27 02:59:59 |
| 5 | 2020-02-27 23:59:59 |
| 6 | 2020-02-28 00:00:00 |
| 7 | 2020-02-28 00:00:00 |
+----+---------------------+
5 rows in set (0.00 sec)
这里有坑:可能以为查询的结果是会包含了2020-02-27、2020-02-28这两天的数据,但实际上28日只会包含0时0分0秒这个时间点的数据,不会包含当天其他时间点的数据。如果没有搞清楚的话,可能会导致我们误以为按日期查询右值是闭区间,是exclude的;或者sql大部分时间没有问题,一旦有了0时0分0秒的数据,就会出现诡异的BUG。
按照日期查询的效果和加上0时0分0秒是一样的,因为mysql在执行查询之前,就是先把日期转成对应0时0分0秒时的时间戳,然后进行匹配查询的。
另一个按照日期范围的between查询mysql> select * from t_test where create_time between 20200227 and 20200228;
+----+---------------------+
| id | create_time |
+----+---------------------+
| 3 | 2020-02-27 00:00:00 |
| 4 | 2020-02-27 02:59:59 |
| 5 | 2020-02-27 23:59:59 |
| 6 | 2020-02-28 00:00:00 |
| 7 | 2020-02-28 00:00:00 |
+----+---------------------+
5 rows in set (0.00 sec)
就算传递的是整数,传递yyyyMMdd格式的日期,mysql也能够识别这个方式的日期数据,实际效果和上面的yyyy-MM-dd是一样的。
总结
between是两端开区间(包含)的语义,使用between时要注意日期范围查询可能会导致的问题。
大多数情况下,建议使用create_time >= 20200227 and create_time < 20200228这样方式进行范围查询。
、>=的语义描述是精确的,不会产生误解。
mysql between 空值_mysql中between关键字避免踩坑相关推荐
- mysql escape关键字_MySQL中ESCAPE关键字的用法详解
MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. MySQL中,转义字符以"\" ...
- mysql range用法_MySQL中Explain的用法总结(详细)
本篇文章给大家带来的内容是关于MySQL中Explain的用法总结(详细),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 执行计划(query Execution plan) 语法e ...
- explain mysql怎么用_mysql中explain用法详解
EXPLAIN用于SELECT语句中的每个表返回一行信息.表以它们在处理查询过程中将被MySQL读入的顺序被列出 如果在select语句前放上关键词explain,mysql将解释它如何处理selec ...
- mysql提取数字_Mysql中实现提取字符串中的数字的自定义函数分享
因需要在mysql的数据表中某一字符串中的字段提取出数字,在网上找了一通,终于找到了一个可用的mysql函数,可以有效的从字符串中提取出数字. 该mysql提取出字符串中的数字函数如下: 复制代码 代 ...
- mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...
情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a, a,b a,b, ...
- mysql join图解_MySQL中Join算法实现原理分析[多图]
在MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join.顾名思义,Nes ...
- mysql getnum函数_Mysql中实现提取字符串中的数字的自定义函数分享
因需要在MysqL的数据表中某一字符串中的字段提取出数字,在网上找了一通,终于找到了一个可用的MysqL函数,可以有效的从字符串中提取出数字. 该MysqL提取出字符串中的数字函数如下: CREATE ...
- mysql regexp边界_MySQL中REGEXP正则表达式使用大全
以前我要查找数据都是使用like后来发现mysql中也有正则表达式了并且感觉性能要好于like,下面我来给大家分享一下mysql REGEXP正则表达式使用详解,希望此方法对大家有帮助. MySQL采 ...
- mysql row_number吗_MySQL中的ROW_NUMBER()是什么?
MySQL版本8.0中包含的Row_NUMBER().这是一种窗口函数.这可用于为行分配序列号.要了解,请借助CREATE pcommand创建一个表- 建立表格CREATE table rowNum ...
最新文章
- 光流估计:从传统方法到深度学习
- 做专才能做强做大——从OA、协同之争说起
- python3.8自带matlop和numpy吗_Python enlop包_程序模块 - PyPI - Python中文网
- 01 | 基础架构:一条 SQL 查询语句是如何执行的
- 软件容量测试和压力测试区别,性能测试、负载测试、压力测试、容量测试的区别...
- DLL和COM的发展过程
- CV Code|计算机视觉开源周报20200602期~文末送书
- 思科集成管理控制器IMC爆出任意代码执行漏洞CVE-2017-6616 绿盟科技发布安全威胁通告...
- JSONKit去警告
- python爬取酷狗音乐歌词_python爬虫教程:爬取酷狗音乐
- typecho图片插件_Typecho弹窗相册插件HighSlide1.4.7更新
- Arcgis报错 ERROR 999999的解决方法汇总
- Java //PP1.3 编写一个程序,分行显示你的名字、生日、爱好、最喜欢的书及最喜欢的电影。
- 国外计算机课程lab,计算机系统实验之bomblab
- c语言中switch结构,switch结构c语言
- 第一章计算机系统概述答案,1第一章计算机系统概论.ppt
- VUE项目中优雅使用EasyPlayer实时播放摄像头多种格式视频
- 解决U盘制作Ubuntu系统安装盘后无法格式化且容量无法恢复
- 成功解决LINK : fatal error LNK1181: 无法打开输入文件“avdevice.lib” error: command 'D:\\Program Files (x86)\\Micr
- 维克森林大学计算机科学专业好不好,维克森林大学商业分析硕士怎么样?
热门文章
- Go社区的2017回顾
- 吴恩达刚刚注册了一个微信公众号,明天发布新书中文版!
- linux磁盘分区dos分区与gpt,Linux与磁盘分区介绍(MBR,GPT)
- ThreadLocal、Volatile、synchronized、Atomic关键字扫盲
- ignore文件的配置
- 《neural networks and deep learning》读书笔记
- 学计算机好找男朋友吗,大学里单身率很高的4个专业,男女比例悬殊,找对象比找工作还难...
- go strings.TrimPrefix() 和 strings.TrimLeft()
- 送福利,价值1000的低蓝光护眼IPS显示屏,写代码神器!
- Housewife Wind