2012-08-21 16 views
6

Gibt es eine Möglichkeit, die Genauigkeit aus dem Ergebnis der Funktion NOW() in PostgreSQL zu entfernen?Entfernen TIMESTAMP-Genauigkeit von NOW() Ergebnis in PostgreSQL?

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

Ich bin auf der Suche für das Format zu sein:

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

Ich bin versucht, eine Spalte vom Typ „Zeitstempel ohne Zeitzone“ mit der folgenden SQL zu aktualisieren:

UPDATE table SET column = now(); 

Danke!

+1

Macht es schaden? Die Datenbank sollte Millisekunden einfach überspringen, wenn der Spaltentyp sie nicht unterstützt. – Crozin

+0

Das ist gut zu wissen, danke. Ich war mir nicht sicher, ob es irgendetwas bewirken würde. – littleK

Antwort

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

Siehe die Dokumentation für DATE_TRUNC.

+0

Danke, pilcrow. Ich habe die Dokumentation durchgekämmt und konnte sie nirgends finden. Ich glaube, ich habe am falschen Ort gesucht. – littleK

+0

@littleK Im neuen Code kann es sich lohnen, die SQL-Standardzeitfunktionen 'current_timestamp' usw. anstelle von' NOW() 'oder (schlechter)' 'now' :: timestamp' zu verwenden. Siehe http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT –

14

Einfache Antwort ist, es auf Nullpräzision zu werfen.

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

+1 eine ausgezeichnete Alternative – pilcrow

+0

+ diese Methode hält Zeitzone – MingalevME

0

Je nach Bedarf, eine weitere Option ist die Genauigkeit der Zeitstempel Spalte selbst einzustellen - seine Präzision auf 0. Dies kann nützlich sein, wenn PostgreSQL mit Legacy-Programme, die in Zeitstempel verarbeiten nicht Sekundenbruchteile .

2

Sie können die Struktur Ihrer Tabelle il ändern Sie die Länge der Säule auf 0 in pgAdmin bewegen 3 oder wenn Sie eine Tabelle erstellen, indem Sie Zeitstempel (0) wie folgt aus:

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

Aber Wenn Sie das tun, wird ein Fehler auftreten, wenn Sie versuchen, einen Zeitstempel mit Millisekunden einzufügen.

Verwandte Themen