2010-09-16 69 views
5

我试图从PostgreSQL的'timestamp'列中提取一天的时间。这是我如何做到的,但是......这太可怕了。一个想法,如何做得更好?有没有更好的方法来提取一天的时间?

SELECT (
    date_part('hour', date_demande)::text || ' hours ' || 
    date_part('minute', date_demande)::text || ' minutes ' || 
    date_part('second', date_demande)::text || ' seconds' 
    )::interval AS time_of_day 

FROM table; 

回答

6

如果您需要确切的时间从一个时间戳,只投时间:

SELECT 
    CAST(colname AS time) 
FROM 
    tablename; 

如果您需要格式化,TO_CHAR( )是你最好的选择。

+0

这是唯一正确的答案,我想把时间输入为时间而不是文本 – 2010-09-17 11:40:10

+0

@GhislainLeveque:OR,甚至更简单:'colname :: time' – 2011-11-21 14:37:50

5

这取决于你想要哪种格式。

但是,使用to_char代替使用date_part可能会更容易。 http://www.postgresql.org/docs/8.4/interactive/functions-formatting.html#FUNCTIONS-FORMATTING-DATETIME-TABLE你的情况

所以,或许是这样的:

to_char(current_timestamp, 'HH:MI:SS') 
+1

为了更接近问题结果:'to_char(current_timestamp,'HH“hours”MI“minutes”SS“seconds”')' – DrColossos 2010-09-16 08:13:15

+0

这个答案不会做同样的事情,我想做的事情:我不想要得到一个“文本”的答案,但一个“时间”的答案(我在谈论结果的类型)。正确的答案是我检查的那个。无论如何谢谢 – 2010-09-17 11:41:16

+0

@Ghislain Leveque:啊,我误解了。在这种情况下,另一种解决方案是'SELECT colname :: time' – Wolph 2010-09-17 11:57:47

相关问题