在使用mybatis
传入日期参数
进行动态时间判断的时候,
如果传入参数为String
, 使用mybatis
时, 在mapper
中以下几种写法是错误的
<if test="query.beginDate != null and query.endDate != ''" >
AND ccf.last_update_timestamp between #{query.beginDate} AND #{query.endDate}
</if>
<if test="query.beginDate != null and query.endDate != ''" >
AND ccf.last_update_timestamp between TIMESTAMP #{query.beginDate} AND TIMESTAMP #{query.endDate}
</if>
<if test="query.beginDate != null and query.endDate != ''" >
AND ccf.last_update_timestamp between TIMESTAMP ${query.beginDate} AND TIMESTAMP ${query.endDate}
</if>
我们看到, 直接在可视化工具里用SQL写
ccf.last_update_timestamp between TIMESTAMP '2019-12-13' AND TIMESTAMP '2019-12-13'
甚至去掉 TIMESTAMP 都是可以的, pgSQL可以自动把字符串给你转换成日期格式, 然后作比较
但是在mapper文件中这么写就不可以了, 它会提示你varchar类型不能和日期类型进行比较
正确的做法是使用DATE()
函数把字符串手动转换成日期
<if test="query.beginDate != null and query.endDate != ''" >
AND ccf.last_update_timestamp between DATE(#{query.beginDate}) AND DATE(#{query.endDate})
</if>
相应地, 如果传入的参数不是一个yyyy-MM-dd的日期格式, 而是一个yyyy-MM-dd HH:mm:ss的格式则是使用TO_TIMESTAMP()
函数
<if test="query.beginDate != null and query.endDate != ''" >
AND ccf.last_update_timestamp between TO_TIMESTAMP(#{query.beginDate},'yyyy-MM-dd hh24:mi:ss') AND TO_TIMESTAMP(#{query.endDate},'yyyy-MM-dd hh24:mi:ss)
</if>
来自 <https://gitee.com/macro_joe/codes/5exhwivrpdkfb7t69yaj149>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构