0

在我的表中,列work_timeinterval类型)的结果显示为200:00:00. 是否可以剪切秒部分,所以它会显示为200:00?或者,甚至更好:(200h00min我已经看到它h在插入中接受单元,所以为什么不像这样加载它?)。最好是通过更改work_time列,而不是通过更改select查询。

4

1 回答 1

0

这不是您应该通过更改列而是通过以某种方式更改选择查询来执行的操作。如果您更改列,您将更改存储和功能用途,这并不好。要在输出上更改它,您需要修改它的检索方式。

你有两个基本的选择。第一种是直接修改您的选择查询,使用to_char(myintervalcol, 'HH24:MI')

但是,如果您的问题是您希望在选择查询中具有通用访问权限的通用格式,那么 PostgreSQL 有一个巧妙的技巧,我称之为“表方法”。您可以将函数附加到表中,这样您就可以使用与新列类似(但不完全相同)的语法来调用它。在这种情况下,您将执行以下操作:

 CREATE OR REPLACE FUNCTION myinterval_nosecs(mytable) RETURNS text LANGUAGE SQL 
 IMMUTABLE AS
 $$
     SELECT to_char($1.myintervalcol, 'HH24:MI');
 $$;

这适用于行输入,而不适用于基础表。由于它总是为相同的输入返回相同的信息,因此您可以将其标记为不可变,甚至可以索引输出(这意味着它可以在计划时运行并使用索引)。

要调用它,您可以执行以下操作:

SELECT myinterval_nosecs(m) FROM mytable m;

但是您可以使用上面的特殊语法将其重写为:

SELECT m.myinterval_nosecs FROM mytable m;

请注意,由于 myinterval_nosecs 是一个函数,因此您不能m.在开头省略 。这是因为查询规划器将用以前的语法重写查询,并且不会猜测您要针对哪个关系运行它。

于 2013-12-06T01:51:59.687 回答