2010-09-16 12 views
5

Estoy tratando de extraer la hora del día de una columna 'timestamp' en PostgreSQL. Así es como lo hice, pero ... es horrible. Una idea de cómo hacerlo mejor?¿Hay alguna forma mejor de extraer la hora del día?

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; 

Respuesta

6

Si necesita la hora exacta de una marca de tiempo, simplemente echar a tiempo:

SELECT 
    CAST(colname AS time) 
FROM 
    tablename; 

Si es necesario formatear, to_char () es tu mejor opción.

+0

Esta es la única respuesta correcta, quería que el tiempo se escribiera como una hora y no como un texto –

+0

@GhislainLeveque: O, incluso más simple:' colname :: time' –

5

Depende del formato que desee, por supuesto.

Pero en lugar de usar date_part podría ser más fácil usar to_char en su lugar. http://www.postgresql.org/docs/8.4/interactive/functions-formatting.html#FUNCTIONS-FORMATTING-DATETIME-TABLE

Así, en su caso tal vez algo como esto:

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

Para acercarse al resultado deseado: 'to_char (current_timestamp, 'HH' hours" MI "minutes" SS "seconds" ') ' – DrColossos

+0

esta respuesta no hace lo mismo que yo quería hacer: no lo hago quiero obtener una respuesta de "texto" pero una respuesta de "tiempo" (estoy hablando del tipo de resultado). La respuesta correcta fue la que revisé. Gracias de todos modos –

+0

@Ghislain Leveque: ah, lo malentendí. Una solución alternativa en ese caso es 'SELECT colname :: time' – Wolph

Cuestiones relacionadas