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}

  第二种方法尝试成功,第二种方法也是网上的方法,自测使用!

 

posted @   林林2127  阅读(593)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示