2012-08-21 41 views
6

¿Hay alguna forma de eliminar la precisión del resultado de la función NOW() en PostgreSQL?Eliminar la precisión TIMESTAMP del resultado NOW() en PostgreSQL?

"2012-08-21 10:23:34.867502" 

Busco el formato a:

"2012-08-21 10:23:34" 

Estoy intentando actualizar una columna de tipo "marca de tiempo y sin zona horaria" con el siguiente SQL:

UPDATE table SET column = now(); 

Gracias!

+1

¿Hace algún daño? La base de datos simplemente debe omitir milisegundos si el tipo de columna no los admite. – Crozin

+0

Eso es bueno saber, gracias. No estaba seguro si eso afectaría algo. – littleK

Respuesta

9
UPDATE tbl SET col = DATE_TRUNC('second', NOW()); 

Consulte los documentos para DATE_TRUNC.

+0

Gracias, pilcrow. Estaba revisando la documentación y no pude encontrarla en ningún lado. Creo que estaba buscando en el lugar equivocado. – littleK

+0

@littleK En el nuevo código, puede valer la pena utilizar las funciones de tiempo estándar de SQL 'current_timestamp', etc. en lugar de' NOW() 'o (peor)' 'now' :: timestamp'. Consulte http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT –

14

La respuesta simple es convertirlo a precisión cero.

select now()::timestamptz(0); 
+0

+1 una excelente alternativa – pilcrow

+0

+ este método mantiene la zona horaria – MingalevME

0

Dependiendo de sus necesidades, es otra opción para ajustar la precisión de la columna de marca de tiempo en sí - el establecimiento de su precisión a 0. Esto puede ser útil cuando se utiliza PostgreSQL con los programas heredados que no manejan las fracciones de segundo en las marcas de tiempo .

2

Se puede cambiar la estructura de su il mesa se mueve la longitud de la columna a 0 en pgAdmin 3 o si crea una tabla utilizando marca de tiempo (0) así:

CREATE TABLE public.users 
(
    id integer serial, 
    username character varying(255) NOT NULL, 
    email character varying(255) NOT NULL, 
    password character varying(255) NOT NULL, 
    created_at timestamp(0) without time zone NOT NULL, 
    updated_at timestamp(0) without time zone NOT NULL, 

    CONSTRAINT users_pkey PRIMARY KEY (id) 
); 

Pero si lo hace, se producirá un error si intenta insertar una marca de tiempo con milisegundos.

Cuestiones relacionadas