如何查询某个时间段内的数据

1、当使用SQL语句查询某个时间段的数据时

我们很自然的会想到使用between…and..来操作,但是如果使用between...and... 这个方法来查询某个时间段的数据时是需要传入两个参数的,一个是起始时间,另一个是结束时间,且两个参数必须要同时存在才能使用between...and...,而我们希望的是只传入一个参数(起始时间或者结束时间)就能进行查询。

但是在使用MyBatis时如果只传入一个参数,则相应的SQL语句是不会执行的,所以不能使用between...and... 来进行某个时间段数据的查询。

2、可以使用" >= ... AND ... <=" 来解决

例如:

SELECT * FROM o_info WHERE create_date >= '2019-03-10 17:04:04' AND create_date  <= '2019-03-15 17:04:28';

但是若要在MyBatis中使用,有一点需要注意:在MyBatis中使用">"和"<"时会提示"The content of elements must consist of well-formed character data or markup."这个错误,原因是使用的">"和"<"不符合xml的书写规范,所以需要把">"和"<"使用<![CDATA[ ]]>标签括起来才行。

使用<![CDATA[ ]]>标签后的代码:

<if test="beginDate != null and beginDate != ''">AND stock_bill.bill_date <![CDATA[>=]]> #{beginDate}</if>
<if test="endDate != null and endDate != ''">AND stock_bill.bill_date <![CDATA[<=]]>#{endDate}</if>

这样就可以实现只选择开始时间或者只选择结束时间,同时选择开始时间和结束时间来进行查询了。

3、如果查询时出现异常提示

### Error querying database.  Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String 

是因为传入的参数类型是日期类型,但是在<if test="beginDate != null and beginDate != ''">和<if test="endDate != null and endDate != ''">却用这个日期类型的参数与空字符串进行了比较,所以出现了程序运行时异常,解决方法是将与空字符串比较的判断去掉,只保留非空判断即可。

4、最终的代码:

 <if test="beginDate != null">AND stock_bill.bill_date <![CDATA[>=]]> #{beginDate}</if>
 <if test="endDate != null">AND stock_bill.bill_date <![CDATA[<=]]>#{endDate}</if>

Mybatis查询日期范围

将日期时间,转换为字符串

select
s.*
from BIZ_ASSAY_ORDER_SAMPLE s
LEFT JOIN BIZ_ASSAY_ORDER o on o.ID=s.ORDER_ID
WHERE 1=1
<if test="status !=null and status !=''">
    AND s.RECORD_STATUS=#{status}
</if>
<if test="sampleNo !=null and sampleNo !=''">
    AND s.SAMPLE_NO LIKE '%'||#{sampleNo}||'%'
</if>
<if test="orderNo !=null and orderNo !=''">
    AND o.ORDER_NO LIKE '%'||#{orderNo}||'%'
</if>
<if test="sampleBizModelId !=null and sampleBizModelId !=''">
    AND s.SAMP_BIZ_MODE_ID=#{ sampleBizModelId }
</if>
<if test="statusFlag !=null and statusFlag !=''">
    AND s.STATUS_FLAG=#{ statusFlag }
</if>
<if test="fromDate != null and fromDate !=''">
    and to_char(o.ORDER_DATE,'yyyy-MM-dd') >=  #{fromDate}
</if>
<if test="toDate != null and toDate !=''">
    and to_char(o.ORDER_DATE,'yyyy-MM-dd') <=  #{toDate}
</if>

关键代码

<if test="fromDate != null and fromDate !=''">
    and to_char(o.ORDER_DATE,'yyyy-MM-dd') >=  #{fromDate}
</if>
<if test="toDate != null and toDate !=''">
    and to_char(o.ORDER_DATE,'yyyy-MM-dd') <=  #{toDate}
</if>

或者

将字符串,转换为日期时间

SELECT
<include refid="Base_Column_List"/>
FROM BIZ_DAILY_PLAN dp
LEFT JOIN DIC_TEST_OBJECT tb ON dp.TEST_OBJECT_ID=tb.ID
LEFT JOIN DIC_SAMPLE_BIZ_MODEL bm ON dp.SAMP_BIZ_MODE_ID=bm.ID
LEFT JOIN RES_LABORATORY l ON dp.LABORATORY_ID=l.ID
WHERE 1=1 AND dp.RECORD_STATUS = ${@cn.com.hwasunsoft.lims.core.enums.RecordStatusEnum@VALID.getValue()}
<if test="dailyPlanStatus !=null and dailyPlanStatus !=''">
    AND dp.CONFIRMATION_STATUS=#{dailyPlanStatus}
</if>
<if test="status !=null and status !=''">
    AND dp.RECORD_STATUS=#{status}
</if>
<if test="labId !=null and labId !=''">
    AND dp.LABORATORY_ID=#{labId}
</if>
<if test="fromDate !=null and fromDate !=''">
    AND dp.PLAN_DATE >= TO_DATE(#{fromDate},'yyyy-mm-dd')
</if>
<if test="toDate !=null and toDate !=''">
    AND TO_DATE(#{toDate},'yyyy-mm-dd') >= dp.PLAN_DATE
</if>

关键代码

<if test="fromDate !=null and fromDate !=''">
    AND dp.PLAN_DATE >= TO_DATE(#{fromDate},'yyyy-mm-dd')
</if>
<if test="toDate !=null and toDate !=''">
    AND TO_DATE(#{toDate},'yyyy-mm-dd') >= dp.PLAN_DATE
</if>

日期等于某天

直接把大于、小于号,改为等于号

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。

MyBatis中如何查询某个时间段内的数据的更多相关文章

  1. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  2. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  3. 如何在PHP环境中使用ProtoBuf数据格式

    这篇文章主要介绍了如何在PHP环境中使用ProtoBuf数据格式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  4. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  5. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  6. Android本地存储方法浅析介绍

    这篇文章主要介绍了Android本地存储案例,方法简单可以实现存储并达到节省内存的效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  7. 详解Python如何实现Excel数据读取和写入

    这篇文章主要为大家详细介绍了python如何实现对EXCEL数据进行读取和写入,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  8. Python自动化办公之Excel数据的写入

    这篇文章主要为大家详细介绍一下Python中excel的写入模块- xlsxwriter,并利用该模块实现Excel数据的写入,感兴趣的小伙伴可以了解一下

  9. Springboot集成mybatis实现多数据源配置详解流程

    在日常开发中,若遇到多个数据源的需求,怎么办呢?通过springboot集成mybatis实现多数据源配置,简单尝试一下,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. JavaScript数据扁平化详解

    这篇文章主要为大家介绍了JavaScript数据扁平化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部