You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解读通过libpq二进制模式获取的PostgreSQL date类型4字节数据?

解读PostgreSQL二进制返回的DateADT类型值

PostgreSQL的date类型在二进制模式下返回的4字节数据,对应src/include/utils/date.h中定义的DateADT(即int32类型),解读规则非常直接:

  • 这个整数是相对于PostgreSQL内部纪元日期2000-01-01的偏移天数
    • 正数表示2000-01-01之后的天数
    • 负数表示2000-01-01之前的天数

验证你的值8332

你可以直接在PostgreSQL中执行SQL验证对应的日期:

SELECT '2000-01-01'::date + 8332;

执行后得到的结果就是该二进制值对应的实际日期。

代码中处理的注意点

通过libpq获取二进制数据时,注意PostgreSQL返回的是网络字节序(大端),需要转换为主机字节序后再计算:

#include <netinet/in.h> // 用于ntohl()

// 假设res是查询结果,行索引0,列索引18是date列
const char* date_bin = PQgetvalue(res, 0, 18);
int32_t date_offset = ntohl(*(const int32_t*)date_bin);
// date_offset即为偏移天数,基于2000-01-01计算日期

关于你之前的错误值1466004328

这个值是Unix时间戳(对应2022-10-25的某个时刻),属于你错误引用的文本列返回的二进制数据(可能该列存储的是时间戳字符串,二进制模式下被解析成了整数),和date类型的存储规则无关。

内容的提问来源于stack exchange,提问作者myk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:36:06