pgsql中epoch用法


问题描述

提示:这里描述项目中遇到的问题:

昨天又被叫回来加班,説是数据问题,又回来加班搞,到了以后发现数据没问题,那就是查询接口的事了,写查询接口的人用时间戳去查询,明明直接可以直接用日期查询,非得改成时间戳查询,结果还是有问题,接下来复盘一下问题。

先看下extract函数格式:

c 复制代码
extract (field from source)
extract函数是从日期或者时间数值里面抽取子域,比如年、月、日等。source必须是timestamp、time、interval类型的值表达式。field是一个标识符或字符串

epoch 新纪元时间的使用 :

c 复制代码
新纪元时间 Epoch 是以 1970-01-01 00:00:00 UTC 为标准的时间,将目标时间与 1970-01-01 00:00:00
时间的差值以秒来计算 ,单位是秒,可以是负值; 有些应用会将时间存储成epoch 时间形式,以提高读取效率,

实现sql:

c 复制代码
其中:indate是test表中的字段,类型为:timestamp
select extract(epoch from indate),indate from test ;

执行结果

我们以2024-01-06 08:00:00 为例,可以看到下列图中对应的时间戳是 :1704528000

我们看java中计算到的时间戳

c 复制代码
String time = "2024-01-06 08:00:00";
SimpleDateFormat formatTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parseTime = formatTime.parse(time);
System.out.println("------------" + parseTime.getTime());
得到的结果:1704499200000,对应sql执行结果:2024-01-06 00:00:00

解决方案:

可以看出sql是有八小时时间差,通过以下方式实现:

c 复制代码
select extract(epoch from cast(indate - interval '8hour' as TIMESTAMP))  from test ;
相关推荐
IvorySQL5 小时前
PostgreSQL 日报 | 可见性映射数据损坏修复(9 月 26 日)
数据库·postgresql
一直在努力学习的菜鸟5 小时前
PostgreSQL PITR实现时间点误删除恢复
postgresql
IvorySQL7 小时前
PostgreSQL 日报| relchecks 溢出导致表无法删除(9 月 28 日)
数据库·人工智能·ai·postgresql·区块链
cpolar技术支持1 天前
本地数据库客户端只能自己用?用 cpolar 安全访问 NAS 上的 PostgreSQL 管理台
postgresql·内网穿透·cpolar·nas·pgadmin
l1t2 天前
DeepSeek总结的pg_clickhouse 与 chdb 更新:编码、嵌套与类型
数据库·clickhouse·postgresql
余槐i3 天前
EXPLAIN 显示走了索引查询仍慢:回表与选择性在 500 万行表上拉开 10 倍耗时
数据库·postgresql·性能优化·vacuum·explain
梦在远山后3 天前
PostgreSQL 锁与死锁:结合 DevMind 讲清楚
python·postgresql·agent
浪潮IT馆3 天前
Windows 10 安装 PostgreSQL 9.6.24 完整教程
数据库·windows·postgresql
岳麓丹枫0014 天前
PG 孤儿物理复制槽残留导致 pg_wal 膨胀 19G 故障分析
postgresql
haerapi4 天前
把 PostgreSQL 复制巡检做成可审计闭环:确定性采集、阈值判定与受控模型归纳
数据库·postgresql