mybatis中进行时间范围查询 怼烎@ 2023-09-26 23:16 84阅读 0赞 # 一 oracle数据库 # 数据库时间类型为DATE ![在这里插入图片描述][cd1955d3aef1400ab7852e61fe5464d9.png] TO\_CHAR 把日期或数字转换为字符串 TO\_DATE 把字符串转换为数据库中的日期类型 TO\_DATE(char, ‘格式’) TO\_NUMBER 将字符串转换为数字 TO\_NUMBER(char, ‘格式’) ### 1、入参是String类型的数据 ### ![在这里插入图片描述][773706b2fc824f44875cadc053b9c892.png] #### mybatis 处理时间范围 #### 使用TO\_DATE函数将String类型的时间转成yyyy-MM-dd格式时间。 **这种写法时间范围查询会有问题,此时的=号会失效,因为VOUCHER\_TIME 是具体到时分秒的,TO\_DATE(\#\{jyzbLedger.voucherTimeFrom\},‘yyyy-MM-dd’)转成时间时丢失了时分秒,导致==判断不成立。最终丢失等值数据** <if test="jyzbLedger.voucherTimeTo != null and jyzbLedger.voucherTimeTo != ''"> and VOUCHER_TIME <![CDATA[>= ]]> TO_DATE(#{jyzbLedger.voucherTimeTo},'yyyy-MM-dd') </if> <if test="jyzbLedger.voucherTimeFrom != null and jyzbLedger.voucherTimeFrom != ''"> and VOUCHER_TIME <![CDATA[<= ]]> TO_DATE(#{jyzbLedger.voucherTimeFrom},'yyyy-MM-dd') </if> **正确写法** 先试用TO\_CHAR将日期转成yyyy-MM-dd格式字符串,然后使用TO\_DATE转成日期 <if test="jyzbLedger.voucherTimeTo != null and jyzbLedger.voucherTimeTo != ''"> and TO_DATE( TO_CHAR( VOUCHER_TIME, 'yyyy-MM-dd' ), 'yyyy-MM-dd' ) <![CDATA[>= ]]> TO_DATE(#{jyzbLedger.voucherTimeTo},'yyyy-MM-dd') </if> <if test="jyzbLedger.voucherTimeFrom != null and jyzbLedger.voucherTimeFrom != ''"> and TO_DATE( TO_CHAR( VOUCHER_TIME, 'yyyy-MM-dd' ), 'yyyy-MM-dd' ) <![CDATA[<= ]]> TO_DATE(#{jyzbLedger.voucherTimeFrom},'yyyy-MM-dd') </if> #### MybatisPlus中时间范围查询 #### queryWrapper .apply(ObjectUtils.isNotEmpty(jyzbLedger.getVoucherTimeTo()), "TO_DATE( TO_CHAR( VOUCHER_TIME, 'yyyy-MM-dd' ), 'yyyy-MM-dd' ) >= TO_DATE ({0},'yyyy-MM-dd')", jyzbLedger.getVoucherTimeTo()) .apply(ObjectUtils.isNotEmpty(jyzbLedger.getVoucherTimeFrom()), "TO_DATE( TO_CHAR( VOUCHER_TIME, 'yyyy-MM-dd' ), 'yyyy-MM-dd' ) <= TO_DATE ({0},'yyyy-MM-dd')", jyzbLedger.getVoucherTimeFrom()); TO\_DATE( TO\_CHAR( VOUCHER\_TIME, ‘yyyy-MM-dd’ ), ‘yyyy-MM-dd’ ) ### 2、入参是Date类型的时间数据 ### `Date类型`接参数就要和前端固定传参格式比如`yyyy-MM-dd`,然后使用`@DateTimeFormat格式化`,不使用 **@DateTimeFormat然后使用Date类型接参数会报错** ! ![在这里插入图片描述][18ba32c0d77b4c9ba22a463c1f6060e4.png] #### mybatis 处理时间范围 #### **TO\_CHAR 把日期或数字转换为字符串** 使用 TO\_CHAR 函数将入参日期格式转换成指定格式字符串,将查询的参数也转换成指定格式字符串 <!-- voucherTimeTo为Date类型时不能用 jyzbLedger.voucherTimeTo != '' 判空会报错的 --> <if test="jyzbLedger.voucherTimeTo != null "> and to_char(VOUCHER_TIME,'yyyy-MM-dd') <![CDATA[>= ]]> to_char(#{jyzbLedger.voucherTimeTo},'yyyy-MM-dd') </if> <if test="jyzbLedger.voucherTimeFrom != null "> and to_char(VOUCHER_TIME,'yyyy-MM-dd') <![CDATA[<= ]]> to_char(#{jyzbLedger.voucherTimeFrom},'yyyy-MM-dd') </if> #### MybatisPlus中时间范围查询 #### 参考上面的 # 二 mysql数据库 # 数据库时间类型为DATE ![在这里插入图片描述][77d783fe6af8452e8c0f6854f6f4f93c.png] ### 2、入参是Date类型的时间数据 ### 1. 入参 achievementDateStart: 2023-04-26 achievementDateStartEnd: 2023-05-19 1. 接收参数类型 /** * 业绩时间-开始 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "业绩时间-开始") private Date achievementDateStart; /** * 业绩时间-结束 */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "业绩时间-结束") private Date achievementDateStartEnd; #### mybatis 处理时间范围 #### date\_format 将Date类型参数格式化成指定类型的时间 <if test="oppConditionVO.achievementDateStart != null and oppConditionVO.achievementDateStartEnd != null"> and date_format( achievement_date, '%Y-%m-%d' ) BETWEEN date_format( #{oppConditionVO.achievementDateStart}, '%Y-%m-%d' ) and date_format( #{oppConditionVO.achievementDateStartEnd}, '%Y-%m-%d' ) </if> #### MybatisPlus中时间范围查询 #### queryWrapper.apply(oppConditionVO.getAchievementDateStart() != null, "date_format (achievement_date,'%Y-%m-%d') >= date_format ({0},'%Y-%m-%d')", oppConditionVO.getAchievementDateStart()) .apply(oppConditionVO.getAchievementDateStartEnd() != null, "date_format (achievement_date,'%Y-%m-%d') <= date_format ({0},'%Y-%m-%d')", oppConditionVO.getAchievementDateStartEnd()); [Mybatis-Plus时间范围查询][Mybatis-Plus] [cd1955d3aef1400ab7852e61fe5464d9.png]: https://img-blog.csdnimg.cn/cd1955d3aef1400ab7852e61fe5464d9.png [773706b2fc824f44875cadc053b9c892.png]: https://img-blog.csdnimg.cn/773706b2fc824f44875cadc053b9c892.png [18ba32c0d77b4c9ba22a463c1f6060e4.png]: https://img-blog.csdnimg.cn/18ba32c0d77b4c9ba22a463c1f6060e4.png [77d783fe6af8452e8c0f6854f6f4f93c.png]: https://img-blog.csdnimg.cn/77d783fe6af8452e8c0f6854f6f4f93c.png [Mybatis-Plus]: https://blog.csdn.net/weixin_43888891/article/details/126868652
还没有评论,来说两句吧...