创建自己的postgresql日期数据类型
2022/1/7 19:10:32
本文主要是介绍创建自己的postgresql日期数据类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
研究了一下postgresql的日期数据类型的二进制存贮方式。发现是存贮是自2000年1月1号以来的天数。这样直接传入二进制参数会比较麻烦。因些参考了一些postgresql扩展的项目如:https://github.com/pgstuff/base32_4b
增加了一个date1的数据类型,存贮格式为 (year << 16) | ((month - 1) << 8) | (mday - 1)
select current_date1(),current_date; current_date1 | current_date ---------------+-------------- 2022-01-07 | 2022-01-07 (1 row)
用如下代码打印二进制内容:
static const char query_cfg_cmd[] = "select current_date1(),CURRENT_DATE"; PGconn *conn; PGresult *res; conn = PQconnectdb(conninfo); res = PQexecParams(conn, query_cfg_cmd, 0, /* one param */ NULL, /* let the backend deduce param type */ NULL, NULL, /* don't need param lengths since text */ NULL, /* default to all text params */ 1); /* ask for binary results */ show_binary_results(res); static void show_binary_results(PGresult *res) { int i, j; /* first, print out the attribute names */ int nFields = PQnfields(res); for (i = 0; i < PQntuples(res); i++) { for(j=0; j< nFields; ++j) if(0 == PQgetisnull(res, i, j)) { int len = PQgetlength(res, i, j); char* vp = PQgetvalue(res, i, j); if(4 == len || 8 == len) { printf("%-15s=", PQfname(res, j)); for(int k=0; k<len; ++k, ++vp) printf("%02x ", *(uint8_t*)vp); printf("\n"); } else { printf("%-15s=%.*s\n", PQfname(res, j), len, vp); } } } } current_date1 =07 e6 00 06 current_date =00 00 1f 6a
这篇关于创建自己的postgresql日期数据类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-05快速清空 PostgreSQL 数据库中的所有表格,让你的数据库重新焕然一新!
- 2024-01-04在PostgreSQL中创建角色:判断角色是否存在并创建
- 2023-05-16PostgreSQL一站式插件推荐 -- pg_enterprise_views
- 2022-11-22PostgreSQL 实时位置跟踪
- 2022-11-22如何将PostgreSQL插件移植到openGauss
- 2022-11-11PostgreSQL:修改数据库用户的密码
- 2022-11-06Windows 环境搭建 PostgreSQL 物理复制高可用架构数据库服务
- 2022-10-27Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务
- 2022-10-11PostgreSql安装(Windows10版本)
- 2022-09-13PostgreSQL-Network Address类型操作和函数