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包含边界值的更多相关文章

  1. mysql判断是否包含某个字符的方法

    mysql判断是否包含某个字符的方法用locate 是最快的,like 最慢.position一般实战例子:select * from historydatawhere locate('0',open ...

  2. mysql 列名中 包含斜杠或者空格的处理方式

    今天客户那边遇到了一个比较奇葩的问题跑来问我,这个问题比较冷门,所以特别记录下. 问题描述 数据库的字段存在斜杠或者空格的时候,怎么用sql进行insert或者select操作. 问题解答 对于这种特 ...

  3. mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?

    需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...

  4. 【数据库】MySQL 函数大全包含示例(涵盖了常用如时间、数字、字符串处理、数据流函数的和一些冷门的)

    ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/mysqlFunctionDesc 数学函数(Mathem ...

  5. mysql判断是否包含某个字符的方法和修改表中指定字段

    用locate 是最快的,like 最慢.position一般实战例子:select * from historydatawhere locate('0',opennum) and locate('1 ...

  6. mysql 优化(包含sql语句的书写)

    http://blog.chinaunix.net/uid-11640640-id-3426908.html  mysql性能优化-慢查询分析.优化索引和配置 2012-11-30 15:18:42 ...

  7. mysql查询语句包含有关键字

    查询mysql的时候,有时候mysql表名或者列名会有关键字.这时候查询会有错误.例如表名是order,查询时候会出错. 简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,例如se ...

  8. [MySQL] INFORMATION_SCHEMA 数据库包含所有表的字段

    sql注入后可以通过该数据库获取所有表的字段信息 1. COLLATIONS表 提供有关每个字符集的排序规则的信息. COLLATIONS表包含以下列: COLLATION_NAME 排序规则名称. ...

  9. 4 MySQL程序概述(包含mysql配置文件配置原理)-学习笔记

    以下参考MySQL5.5官方简体中文参考手册完美版--用于自学复习使用 4.1 程序概述 MySQL AB提供了几种类型的程序:一般放在/安装目录/bin下 1 MYSQL服务器和服务器启动脚本 my ...

  10. MySQL修改root密码的多种方法, mysql 导出数据库(包含视图)

    方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass ...

随机推荐

  1. Spark如何对源端数据做切分?

    简介: 典型的Spark作业读取位于OSS的Parquet外表时,源端的并发度(task/partition)如何确定?特别是在做TPCH测试时有一些疑问,如源端扫描文件的并发度是如何确定的?是否一个 ...

  2. 【漫画】最近,老王又双叒get了CDN的新技能—可编程化敏捷开发

    原文链接本文为阿里云原创内容,未经允许不得转载.

  3. 一不小心,它成为了 GitHub Alibaba Group 下 Star 最多的开源项目

    简介: 随着微服务的流行,应用更加轻量和高效,但是带来的困境是线上问题排查越来越复杂困难.传统的 Java 排查问题,需要重启应用再进行调试,但是重启应用之后现场会丢失,问题难以复现. 来源 | 阿里 ...

  4. dotnet 使用 WpfAnalyzers 辅助分析 WPF 应用代码缺陷

    引入 WpfAnalyzers 代码分析工具,相当于给团队加入一个免费的代码审查工具人,可以帮忙在日常开发找到很多代码缺陷.加入 WpfAnalyzers 代码分析工具,可以减少代码编写里的低级缺陷, ...

  5. PostMan接口测试实用小点

    PostMan接口测试实用小点 1. 接口测试变量存取操作 在Postman中有很多地方可以存储一些变量,这里只介绍经常使用的环境变量.变量设置后,在UI界面可以通过{{变量名}}获取到对应值. 在环 ...

  6. vue子组件给父组件传值

    子组件: <template> <div class="app"> <input @click="sendMsg" type=&q ...

  7. ansible系列(23)--ansible的when控制语句

    目录 1 when控制语句 1.1 根据不同操作系统安装相同的软件 1.2 为不同centos版本安装httpd软件 1.3 为特定的主机添加Nginx仓库 1.4 判断服务是否正常运行 1 when ...

  8. DNS(4) -- dns功能实现-配置正向解析和反向解析以及DNS递归查询示例

    目录 1 DNS配置示例 1.1 DNS解析类型 1.2 配置正向解析 1.3 配置反向解析 1.4 DNS递归查询 1.4.1 开启递归查询 1.4.2 关闭递归查询 1 DNS配置示例 1.1 D ...

  9. VNC远程控制软件是什么?有没有更好的远程桌面控制解决方案?

    看官老爷们,你们是否需要远程访问或远程支持解决方案?来了解下VNC吧. 什么是VNC? VNC是虚拟网络计算(VNC)是一种远程桌面共享技术,用于从世界任何地方远程访问和控制计算机. VNC的工作原理 ...

  10. Django自定义模板标签与过滤器

    title: Django自定义模板标签与过滤器 date: 2024/5/17 18:00:02 updated: 2024/5/17 18:00:02 categories: 后端开发 tags: ...