解决MySQL日期字段类型不匹配导致的时间区间查询异常

前言

在今天的开发过程中,我碰到了一个关于时间查询的bug。在使用MyBatis Plus的Lambda表达式进行时间区间查询时,发现某些满足条件的数据无法被正确检索出来。经过一番分析,发现问题根源在于查询条件与数据库实际存储的时间格式不匹配。

问题描述

场景是这样的:在我们的系统中,数据库表SysOss中的createTime字段存储的是完整的日期时间信息,格式为yyyy-MM-dd HH:mm:ss。然而,在进行查询时,前端传递过来的查询条件beginCreateTimeendCreateTime却是仅包含日期部分的字符串,格式为yyyy-MM-dd

当我们使用如下代码进行时间区间的查询时:

lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));

由于数据库中的createTime包含了时间部分,而查询条件仅指定了日期部分,这就导致了即使是同一天的数据,也无法匹配到——比如数据库中有一条记录的createTime2024-03-26 19:07:00,而查询条件为beginCreateTimeendCreateTime均为2024-03-26时,这条记录未能被正确筛选出来。

解决方案

针对这个问题,我提出了两种不同的解决方案:

方案一:扩展查询条件的时间范围

调整查询语句,将结束时间的条件增加至当天的最末时刻,即:

lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime") + " 23:59:59");

这样,查询条件实际上变成了从beginCreateTime的零点到endCreateTime的23点59分59秒之间,可以确保涵盖全天的数据。

方案二:使用SQL函数进行格式转换与比较

另一种解决方法是对数据库中的createTime字段做格式化处理,使其与查询条件在同一格式下进行比较:

// 开始时间的条件处理
lqw.apply(params.get("beginCreateTime") != null, "date_format(`create_time`, '%Y-%m-%d') >= date_format({0}, '%Y-%m-%d')", params.get("beginCreateTime"));// 结束时间的条件处理
lqw.apply(params.get("endCreateTime") != null, "date_format(`create_time`, '%Y-%m-%d') <= date_format({0}, '%Y-%m-%d')", params.get("endCreateTime"));

这种方式利用MySQL的date_format函数将数据库中的createTime字段转为日期格式并与查询条件进行比较,确保只比较日期部分,忽略时间部分。

总结

通过对查询条件或数据库字段进行适当的转换和处理,上述两种解决方案均能有效解决因日期时间格式差异引发的查询异常问题。在实际应用中,可以根据项目需求和数据库性能等因素综合考量选择合适的方法进行优化。同时,这也提醒我们在进行日期时间类型的交互和处理时,充分关注数据格式的统一性和兼容性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/779728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我是如何在学术界占有一席之地的——专注于我的写作

罗伯特纽贝克 “作为一个移民&#xff0c;你是怎么发表这么多文章的&#xff1f;”意识到我不是以英语为母语的人&#xff0c;当我去年面试教职时&#xff0c;人们无数次问过这个问题。我知道披露我的挣扎不太可能让我找到工作&#xff0c;所以我会笑着说&#xff1a;“我喜欢…

设计模式88

一、创建型模式&#xff08;5种&#xff09; 1、工厂方法模式 同一类产品的生产 2、抽象工厂模式 将同一个具体工厂所生产的位于不同等级的一组产品称为产品族&#xff0c;例如&#xff08;衣服鞋子帽子&#xff09; 同一级别 3、单例模式 4、建造者模式 建造者和指挥者…

Python实现VMware自动化资源巡检

推送效果&#xff1a; E:\PYPJ1\Scripts\python.exe C:\Users\PycharmProjects\pythonProject\main.py 自动化巡检-执行时间&#xff1a;2024-03-25 14:47:04 Connected to vCenter Found datacenter: CN-SH-Datacenter----------存储资源指标---------- 资源总容量&#xff…

实验报告-04

实验名称&#xff1a;实验四 递推问题&#xff08;一&#xff09; 实验目的&#xff1a;熟练掌握一些递推问题的处理方法&#xff1a;仔细分析&#xff0c;不断尝试推理&#xff0c;充分利用数学知识&#xff0c;找出问题中的内在规律&#xff0c;抽象出递推的数学模型。 实验…

【c 语言 】malloc函数详解

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

安卓手机APP开发者的第一件事:安装安卓工作台

安卓手机APP开发者的第一件事:安装安卓工作台 安装安卓工作台仅需要一些点击。首先检查软件对系统需求。 然后下载最新版本的安卓工作台。 在windows系统下的安装 需求项 最低配置 推荐配置 操作系统 64位的windows8 最新版本的64位的windows 内存 8GB …

LeetCode 热题 100 题解(一):哈希部分

《LeetCode热题 100》 经过了两个多月&#xff0c;终于刷完了代码随想录的题目&#xff0c;现在准备开始挑战热题一百了&#xff0c;接下来我会将自己的题解以博客的形式同步发到力扣和 c 站&#xff0c;希望在接下来的征程中与大家共勉&#xff01; 题组一&#xff1a;哈希 题…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路&#xff1a;因为本题是二叉搜索树&#xff0c;利用它的特性可以从上往下进行递归遍历树&#xff0c;这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…

Git实现提交代码自动更新package.json版本号

此文章主要讲诉如何通过git提交代码来自动更新我们的版本号&#xff0c;也可以指定固定分支才能更新 只要涉及到package version的项目都可以&#xff0c;例如&#xff1a;Vue、React、Node等等 前提是当前项目已经关联了Git仓库 一、编写我们的Node更新版本逻辑&#xff0c;名…

Debezium日常分享系列之:Debezium 2.6.0.CR1发布

Debezium日常分享系列之&#xff1a;Debezium 2.6.0.CR1发布 一、重大改变1.MySQL2.SQL Server3.Vitess 二、新功能和改进1.OpenLogReplicator 的 XML 支持2.Debezium 服务器的 TRACE 级别日志记录3.新的统一快照模式4.Cassandra 可配置分区模式 Debezium 2.6.0.CR1版本包含许多…

QSplashScreen

以前打红警的时候进入游戏界面会有一个启动界面&#xff0c;比如美国是有伞兵&#xff0c;英国有狙击手&#xff0c;韩国有黑鹰战机的一些介绍&#xff0c;这些就是启动界面&#xff0c;就是由QSplashScreen这个类来实现的。 QSplashScreen 是 Qt 框架中的一个类&#xff0c;用…

jsp用户登录界面

主界面 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><meta charset"UTF-8"><title>登录界面</title> </head> <body bgcolor"#faebd7"> <form…

HarmonyOS实战开发-UIAbility和自定义组件生命周期

介绍 本文档主要描述了应用运行过程中UIAbility和自定义组件的生命周期。对于UIAbility&#xff0c;描述了Create、Foreground、Background、Destroy四种生命周期。对于页面和自定义组件描述了aboutToAppear、onPageShow、onPageHide、onBackPress、aboutToDisappear五种生命周…

公司防泄密软件有哪些?|六款值得老板收藏的公司防泄密软件

文件数据是企业极为重要的知识产权&#xff0c;关系到企业的核心竞争力&#xff0c;对企业的发展至关重要&#xff0c;甚至直接影响到企业的生存和发展。 企业泄密事件也是屡屡发生&#xff0c;如何保护企业核心机密文件的安全已成为影响企业快速发展的重要因素。 针对企业数据…

1.Netty介绍及NIO三大组件

Netty网络编程Netty的底层是NIO&#xff08;非阻塞IO&#xff09;&#xff0c;常用的多线程和线程池使用的是阻塞IO&#xff0c;其效率并不高。支持高并发&#xff0c;性能好高性能的服务端程序、客户端程序 NIO三大组件 一、Channel 读写数据的双向传输通道 常见的传输通道…

【干货分享】OpenHarmony轻量系统适配方案

1. 简介 本文在不改变原有系统基础框架的基础上&#xff0c; 介绍了一种OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;轻量系统适配方案。 本方案使用的是 OpenHarmony v3.2 Release版本源码。 2. 方案设计 本文使用的硬件模块的主要特性及功能如…

fast_bev学习笔记

目录 一. 简述二. 输入输出三. github资源四. 复现推理过程4.1 cuda tensorrt 版 一. 简述 原文:Fast-BEV: A Fast and Strong Bird’s-Eye View Perception Baseline FAST BEV是一种高性能、快速推理和部署友好的解决方案&#xff0c;专为自动驾驶车载芯片设计。该框架主要包…

day 41 动归 04

01背包问题 二维 dp[i][j] 表示在物品i时&#xff0c;背包在j容量下的最大价值&#xff0c;递推公式为 dp[i][j] Math.max(dp[i-1][j] , dp[i-1][j-weight[i]] value[i]); 第一个时不放物品i&#xff0c;其价值等于在物品i-1时背包在j容量下的最大价值&#xff0c;第二个是放…

Oracle里的优化器

目录 一、RBO 二、CBO 1、集的势&#xff08;cardinality&#xff09; 2、可选择率&#xff08;Selectivity&#xff09; 3、可传递性 4、CBO的局限性 三、优化器基础知识 1、优化器的模式 2、结果集&#xff08;row source&#xff09; 3、访问数据的方法 优化器&am…

tab切换组件,可横向自适应滑动

示例图&#xff1a; 注&#xff1a;需要引入Jquery <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.tabs-box {width: 100%;height: auto;}.tab-header-box {display: flex;overflow: hidden…