2012-08-21 11 views
6

Esiste un modo per rimuovere la precisione dal risultato della funzione NOW() in PostgreSQL?Rimuovi la precisione TIMESTAMP dal risultato NOW() in PostgreSQL?

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

sto cercando il formato da:

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

Sto tentando di aggiornare una colonna di tipo "timestamp senza fuso orario" con il seguente SQL:

UPDATE table SET column = now(); 

Grazie!

+1

Fa male? Il database dovrebbe saltare semplicemente millisecondi se il tipo di colonna non li supporta. – Crozin

+0

Buono a sapersi, grazie. Non ero sicuro se avrebbe influenzato nulla. – littleK

risposta

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

Vedere i documenti per DATE_TRUNC.

+0

Grazie, pilcrow. Stavo esaminando la documentazione e non riuscivo a trovarla da nessuna parte. Credo che stavo cercando nel posto sbagliato. – littleK

+0

@littleK Nel nuovo codice può valere la pena utilizzare le funzioni temporali standard SQL 'current_timestamp' ecc anziché' NOW() 'o (peggio)' 'now' :: timestamp'. Vedi http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT –

14

La risposta semplice è lanciarlo a precisione zero.

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

+1 un'ottima alternativa – pilcrow

+0

+ questo metodo mantiene il fuso orario – MingalevME

0

A seconda delle esigenze, un'altra opzione è quella di regolare la precisione della colonna timestamp in sé - impostando la sua precisione a 0. Questo può essere utile quando si utilizzano PostgreSQL con i programmi precedenti che non gestiscono frazioni di secondo in timestamp .

2

È possibile modificare la struttura della tabella il si sposta la lunghezza della colonna a 0 in pgAdmin 3 o se si crea una tabella utilizzando timestamp (0) così:

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) 
); 

Ma se lo fai, si verificherà un errore se proverai a inserire un timestamp con millisecondo.

Problemi correlati