0

在自定义C 函数中,如何将字符串(例如 '2012-01-10')日期转换为 unix 时间戳?

我的意思是有一些 C 技巧来完成这项工作或一些铸造吗?或者我需要使用 SQL 调用:

SELECT extract(epoch FROM date('2012-01-10'));

这不是性能损失吗?

我看过一个例子

PGtimestamptz ts; 
res = PQexef("select now()"); 
PQgetf(res, 0, "%timestamptz", 0 , &ts); 
int epoch = ts.epoch; 

我已经安装了 libpqtypes 但似乎该示例不完整并且不起作用

有人可以建议这种转换的最佳方法和/或提供使用 libpqtypes 开发 postgresql 自定义 C 函数的完整示例吗?

我在 Linux 机器上使用 PostgreSQl 9.3

多谢

卢卡

4

1 回答 1

0

在 PostgreSQL(服务器端)内部(您谈论 PostgreSQL 自定义函数),您可以使用两种可能的路径:

a)您可以为预期类型调用“in”函数 - 时间戳 b)您可以调用 to_time 函数

相关调用可能如下所示:

时间戳 t;

t = DatumGetTimestamp(DirectFunctionCall2(to_timestamp,
                               CStringGetTextDatum("2013-08-15"),
                               CStringGetTextDatum("YYYY-MM-DD"));

当然,您可以使用 POSIX 库,但是您不能确定可移植性和未来的兼容性。这是服务器端 - 您将使用这种技术来处理 PostgreSQL 自定义 C 函数。

在客户端取决于预期的速度。通过 SQL 调用使用服务器端转换通常是简单、可移植且速度足够快的解决方案。典型的瓶颈是 IO,因此您不需要在典型用例中优化 CPU - 您可以使用简单且可移植的解决方案(使用文本而不是二进制)。有一些关于 PGtimestamp 的信息http://libpqtypes.esilo.com/man3/pqt-handlers.html

于 2013-11-13T12:53:47.200 回答