首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PostgreSQL PLPerl函数中进行数据/时间操作

如何在PostgreSQL PLPerl函数中进行数据/时间操作
EN

Stack Overflow用户
提问于 2015-08-06 23:21:20
回答 2查看 638关注 0票数 1

在用plperl编写Postgres函数(存储过程)时,我了解到加载perl模块是不可能的,比如"use::Piece;“。既然如此,在plperl中处理日期/时间操作和比较的最佳方法是什么?使用plperlu和加载模块对我来说不是一种选择。

我不得不提出以下问题:

代码语言:javascript
复制
$query = "SELECT extract(day from timestamp '$eventDate') AS day,
                 extract(month from timestamp '$eventDate') AS month,
                 extract(year from timestamp '$eventDate') AS year";

我还使用SQL将时间戳转换为划时代的时间,以便在perl中进行比较。我希望这是一个愚蠢的问题,还有一种更直接、更简单的方法来处理日期/时间功能。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-07 16:58:56

要做到这一点可不容易。您有四个基本选项,使用哪一个取决于您的具体情况。

  1. 在存储过程中使用SQL。 这通常比我喜欢的要详细,但它可能是最简单和最有效的。示例: 我的$now = spi_exec_query('SELECT (epoch从NOW(())‘)->{rows}->{date_part}\Unable“无法确定当前时间”; 或同时用于多个值: 我的$row =spi_exec_query(‘选择提取(.)为a,解压缩(.)为b,.作为x’)->{row}或死“一些有用的消息.”;$a = $row->{a};my $b = $row->{b};.我的$x = $row->{x};
  2. 用SQL或plpgsql存储过程包装plperl SP,该存储过程传递所需的日期值: 创建函数foo作为$$选择foo_pl(提取(.)、提取(.)、.) $$语言SQL;
  3. 在perl中手动进行日期操作。 这往往是丑陋的(以及为什么日期操作模块存在的第一!)但可能适用于足够简单的操作,在这些操作中,闰年、时区等与此无关(将单个小时或一天添加到某个时间跨度,等等)。
  4. 需要一个更复杂的perl模块,比如DateTime。 这通常需要使用plperlu,而不是标准plperl,后者可能附带一些安全问题。将如此大的模块加载到存储过程中也不太可能提高性能。但是,如果您有大量的系统内存,并且对plperlu的安全问题感到满意(这篇文章中没有提到),它可以是一种选择。
票数 0
EN

Stack Overflow用户

发布于 2015-08-06 23:38:16

几乎任何Postgres数据库框架都会自动为您转换日期和DateTime数据类型。当将这些类型插入Postgres中时,如果它们不是自动转换的,那么UTC格式就是Postgres始终能够理解的格式。

更新

根据下面的注释,我只能参考详细记录的日期/时间函数列表,因为问题中没有关于所需操作类型的具体内容:Postgres日期/时间函数和运算符

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31867343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档