MySQL BETWEEN AND包含边界值
select count(1) from table_a where my_date between '20230715' and '20230717';
上面的SQL我们发现只统计了20230715、20230716的数据,没有17日的数据。难道BETWEEN AND不包含边界吗?
MySQL中BETWEEN AND包含边界值吗?答案是肯定的,是包含边界的。那为什么有此疑问呢?
MySQL使用BETWEEN AND关键字进行范围查询,等同于>= && <=。适用于字符串类型、数值类型、日期、日期时间类型。
但是我们在编写SQL时传入的要么是字符串,要么是数值,针对字段的实际类型,会对我们查询条件值进行转化,转化的结果的多样性,就导致我们对于是否包含边界值的误解。出现此误解的主要是DATETIME类型。
再看上面的问题,我们发现my_date字段的类型是DATETIME,实际查询时MySQL将 string('20230715') 转化为了datetime('2023-07-15 00:00:00'),将 string('20230717') 转化成了datetime('2023-07-17 00:00:00'),再带回到SQL中
select count(1) from table_a where my_date between '2023-07-15 00:00:00' and '2023-07-17 00:00:00';
这样和查询结果匹配了。
出现这样的问题,是因为字段命名不规范,同时开发人员没有确认字段的具体类型,根据字段中文名或者英文名,先入为主,误将datetime类型作为date类型来查询,才编写了上面的SQL。实际datetime类型按照日期来过滤数据的写法有很多种,比如如下两种方法
- 编写完整的时间串作为条件值
-- 要不要考虑时间精度,请根据实际情况编写
select count(1) from table_a where my_date between '2023-07-15 00:00:00' and '2023-07-17 23:59:59.999999';
- 将字段值转换为date
select count(1) from table_a where date(my_date) between '2023-07-15' and '2023-07-17';
select count(1) from table_a where str_to_date(my_date, '%Y-%m-%d') between '2023-07-15' and '2023-07-17';
MySQL BETWEEN AND包含边界值的更多相关文章
- mysql判断是否包含某个字符的方法
mysql判断是否包含某个字符的方法用locate 是最快的,like 最慢.position一般实战例子:select * from historydatawhere locate('0',open ...
- mysql 列名中 包含斜杠或者空格的处理方式
今天客户那边遇到了一个比较奇葩的问题跑来问我,这个问题比较冷门,所以特别记录下. 问题描述 数据库的字段存在斜杠或者空格的时候,怎么用sql进行insert或者select操作. 问题解答 对于这种特 ...
- mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?
需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...
- 【数据库】MySQL 函数大全包含示例(涵盖了常用如时间、数字、字符串处理、数据流函数的和一些冷门的)
ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/mysqlFunctionDesc 数学函数(Mathem ...
- mysql判断是否包含某个字符的方法和修改表中指定字段
用locate 是最快的,like 最慢.position一般实战例子:select * from historydatawhere locate('0',opennum) and locate('1 ...
- mysql 优化(包含sql语句的书写)
http://blog.chinaunix.net/uid-11640640-id-3426908.html mysql性能优化-慢查询分析.优化索引和配置 2012-11-30 15:18:42 ...
- mysql查询语句包含有关键字
查询mysql的时候,有时候mysql表名或者列名会有关键字.这时候查询会有错误.例如表名是order,查询时候会出错. 简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,例如se ...
- [MySQL] INFORMATION_SCHEMA 数据库包含所有表的字段
sql注入后可以通过该数据库获取所有表的字段信息 1. COLLATIONS表 提供有关每个字符集的排序规则的信息. COLLATIONS表包含以下列: COLLATION_NAME 排序规则名称. ...
- 4 MySQL程序概述(包含mysql配置文件配置原理)-学习笔记
以下参考MySQL5.5官方简体中文参考手册完美版--用于自学复习使用 4.1 程序概述 MySQL AB提供了几种类型的程序:一般放在/安装目录/bin下 1 MYSQL服务器和服务器启动脚本 my ...
- MySQL修改root密码的多种方法, mysql 导出数据库(包含视图)
方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass ...
随机推荐
- [FAQ] MEMORY ALLOC FAILED: mmap with HUGETLB failed, attempting without it (you should fix your kernel)
cat /proc/meminfo | grep Huge sysctl vm.nr_hugepages=128 cat /proc/meminfo | grep Huge Link:https:// ...
- dotnet ConditionalWeakTable 的底层原理
在 dotnet 中有一个特殊的类,这个类能够做到附加属性一样的功能.也就是给某个对象附加一个属性,当这个对象被回收的时候,自然解除附加的属性的对象的引用.本文就来聊聊这个类的底层原理 小伙伴都知道弱 ...
- spannerlib优雅的go异常处理
蹩脚的go 异常处理 一般写go的人,如果他不是写算法,正常写业务代码的话,可能都会为优雅的异常处理而烦恼,因为脑子抽筋的go设计者们,总是感觉语法糖是一种很低级的东西.但是在我们大多数公司的业务逻辑 ...
- SAP Adobe Form 教程一 简单示例
马上需要用到adobe form,这里搬运一篇教程学习下. 英文原文:SAP Adobe Interactive Form Tutorial. Part I. First Adobe Form 本文链 ...
- Sermant在异地多活场景下的实践
本文分享自华为云社区<Sermant在异地多活场景下的实践>,作者:华为云开源. Sermant社区在1.3.0和1.4.0版本相继推出了消息队列禁止消费插件和数据库禁写插件,分别用于解决 ...
- code::blocks更改编译器配置
- Akima算法
测量数据的内插已有各种方法,如线性内插.多项式内插.样条函数插值等,但这里的Akima插值法具有独特的优点. 线性内插只顾及其附近两点的影响. 多项式内插时,低阶多项式由于参数较少,内插精度很低,而使 ...
- apisix~自定义插件的部署
参考 https://docs.api7.ai/apisix/how-to-guide/custom-plugins/create-plugin-in-lua https://apisix.apach ...
- 4G EPS 第四代移动通信系统
目录 文章目录 目录 4G EPS 4G EPS 4G(the 4th generation mobile communication technology,第四代移动通信技术)提供了 3G 不能满足 ...
- group_concat 和 case when 的坑
SELECT size,instrument_id, (CASE side WHEN "sell" THEN group_concat(id ORDER BY id) END )a ...