Postgresql使用中踩过的坑
一,日期类型的比较问题
数据库中存储日期的字段为timestamp类型,而Java对象中对应属性的类型的Date类型,两者进行比较时,需要进行一定的格式转换。
案例:数据库中存储的日期存在时分秒,现在要查询某个时间(某年某月某日)的数据,直接比较查询可能因为时分秒的不同导致查询到的数据为空,需要将DB中的日期格式和Java对象中对应属性的日期格式都转为“yyyy-MM-dd”,再进行比较。
解决过程:通过to_date()函数将数据库中日期转换为‘yyyy-MM-dd’,Java接收前端的日期格式可能也有问题,我先用JsonFormat(pattern = "yyyy-MM-dd")注解放在Vo的对应字段上,但是发现没有用,接收到前端的数据还是存在时分秒,最后使用jdbcType=DATE放在sql中解决,实例代码如下:
1 2 | select * from table where to_date(insert_data, 'yyyy-MM-dd' ) = #{insertDate,jdbcType= DATE } |
运行后执行发现继续报错,查看日志信息:Postgresql to_date(timestamp without time zone, unknown)不存在 Hint: 没有匹配指定名称和参数类型的函数. 您也许需要增加明确的类型转换.
报错问题是Postgressql中to_date()函数的使用问题,正确使用方法:
1 2 3 4 5 6 7 | select * from table where to_date(insert_data::text, 'yyyy-MM-dd' ) = #{insertData,jdbcType= DATE } 或者 select * from table where to_date( cast (insert_data as TEXT), 'yyyy-MM-dd' ) = #{insertData,jdbcType= DATE } |
第二种方法尝试成功,第二种方法也是网上的方法,自测使用!
分类:
踩坑记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人