注意!Postgresql 用npgsql 获取的时间数据,毫秒丢失了?

文章讲述了作者在使用PostgreSQL时遇到时间字段毫秒丢失问题,通过Npgsql查询发现时间不完整。作者介绍了NodaTime库的可能解决方案,以及如何通过ToChar函数转换时间格式以解决这个问题。
摘要由CSDN通过智能技术生成

       伙计们,事情是这样子的。就在这两天同事说,你postgresql 中存储的时间怎么带毫秒,然而你的前端界面显示的数据怎么毫秒都是000。我惊讶了!界面打开一看确实是的。

       我写的sql 语句为

SELECT "ID", "EventEnum", "Type","OccurTime", "Level","Source" , "Description" FROM 
"EventManager" where "OccurTime" >='20240111 000000' and "OccurTime" <='20240111 235959' 
 and (FALSE  OR "Level"='Alarm'  OR "Level"='Warning'  OR "Level"='Information'  )  order
 by "OccurTime" DESC limit 2000 offset 0;

数据库查询出来的数据为

可以看到时间字段OccurTime 确实带有毫秒。

然后通过npgsql 查询出来的结果如下

 

时间字段不带有毫秒。

       于是我就开始大量的查资料,可能是我用的npgsql 的版本太低了吗?因为项目原因,不能更换新版本。下面我提供了一个文档的链接。里面详细说了有关时间的相关设置和操作。感兴趣的小伙伴可以去探究尝试一下。

        Date and Time Handling | Npgsql Documentation 

其中里面有一个NodaTime ,也许能够解决这个问题。文档里说

“默认情况下,PostgreSQL 日期/时间类型映射到内置的 .NET 类型 (, )。不幸的是,这些内置类型在许多方面都存在缺陷。NodaTime库的创建是为了解决其中的许多问题,如果您的应用程序以最基本的方式处理日期和时间,您应该考虑使用它。”

 

我目前还没有尝试用它。因为项目不允许加进去。

最终我使用了ToChar ,将时间转化为字符串,然后在通过DateTime 进行转化 。

TO_CHAR("OccurTime", 'YYYY/MM/DD hh24:mi:ss.ms') as "OccurTime"

上边是sql 语句的变化,注意这里的时间格式。mi(分钟),不能写成mm。因为我尝试过了,这样写的结果是错误的。具体原因我没有去仔细研究。

       本篇内容旨在记录自己的经历。希望大佬们看到后不要喷我哈。当然这里有很多没有验证的东西。感兴趣的小伙伴可以一起去探索。评论区告诉我你尝试中遇到的问题。期待和大家一起探讨。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值