PostgreSQL格式化时间聚合函数日期('date_format')

时间:2012-04-30 19:40:17

标签: sql postgresql plpgsql

是否有任何汇总功能来格式化日期和时间时间(但我对间隔更感兴趣)是以11:10:4511h 10m 45s之类的自定义方式或类似PostgreSQL中的方式?或者我需要自己提取零件或连接它们?

number of days

中的interval特别出现问题

3 个答案:

答案 0 :(得分:1)

查看to_char函数的完整文档,它可以执行您想要的操作

http://www.postgresql.org/docs/9.1/interactive/functions-formatting.html

答案 1 :(得分:1)

你的问题不太清楚。如果要检索

  

间隔天数

您可以使用EXTRACT

SELECT EXTRACT(day from '7 week'::interval) AS d

 d
----
 49

请注意,这会提取给定的间隔的子字段。间隔未标准化或合理化。为了证明间隔的合理性,首先使用justify_interval()

SELECT EXTRACT(day from justify_interval('7 week'::interval)) AS d;

 d
----
 19

从49天中扣除了30个月的一个月。

因此,这些表达式返回0天:

SELECT EXTRACT(day from '24h'::interval);
SELECT EXTRACT(day from '1 months'::interval);

如果您只想要日期之间的天数

SELECT '2012-3-23'::date - '2012-3-1'::date AS d;

 d
----
 22

您只需减去日期即可获得一个整数,表示两者之间的天数。

或者在时间戳之间:

SELECT EXTRACT (day from '2012-03-25 23:12'::timestamp
                       - '2010-03-01 03:34'::timestamp) AS d;

  d
-----
 755

答案 2 :(得分:0)

尝试设置PostgreSQL设置的不同值 intervalstyle

db=# show intervalstyle ;
 IntervalStyle 
---------------
 postgres

db=# select interval '3 days 11:10:45';
    interval     
-----------------
 3 days 11:10:45

db=# set intervalstyle = 'postgres_verbose';
SET

db=# select interval '3 days 11:10:45';
             interval              
-----------------------------------
 @ 3 days 11 hours 10 mins 45 secs

db=# set intervalstyle = 'iso_8601';
SET

db=# select interval '3 days 11:10:45';
   interval    
---------------
 P3DT11H10M45S