2010-09-16 14 views
5

Ich versuche, die Uhrzeit aus einer "Zeitstempel" -Spalte in PostgreSQL zu extrahieren. Hier ist, wie ich es gemacht habe, aber ... es ist schrecklich. Eine Idee, wie es besser geht?Gibt es eine bessere Möglichkeit, die Uhrzeit zu extrahieren?

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; 

Antwort

6

Wenn Sie die genaue Zeit von einem Zeitstempel, werfen, nur um Zeit:

SELECT 
    CAST(colname AS time) 
FROM 
    tablename; 

Wenn Sie die Formatierung, to_char () ist deine beste Wahl.

+0

Dies ist die einzige richtige Antwort, ich wollte die Zeit als eine Zeit eingegeben und nicht als Text –

+0

@ GhislainLeveque: ODER, noch einfacher: 'colname :: time' –

5

Es hängt davon ab, in welchem ​​Format Sie es natürlich wollen.

Aber anstatt date_part zu verwenden, könnte es einfacher sein, stattdessen to_char zu verwenden. http://www.postgresql.org/docs/8.4/interactive/functions-formatting.html#FUNCTIONS-FORMATTING-DATETIME-TABLE

Also in Ihrem Fall vielleicht etwas wie folgt aus:

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

Um näher an das gestellte Ergebnis zu kommen: 'to_char (current_timestamp, 'HH" Stunden "MI" Minuten "SS" Sekunden "') – DrColossos

+0

diese Antwort macht nicht das gleiche, was ich tun wollte: ich nicht möchte eine "Text" -Antwort bekommen, aber eine "Zeit" -Antwort (ich spreche über die Art des Ergebnisses). Die richtige Antwort war diejenige, die ich überprüft habe. Danke trotzdem –

+0

@Ghislain Leveque: ah, ich missverstanden. Eine alternative Lösung in diesem Fall ist "SELECT colname :: time" – Wolph

Verwandte Themen