Ich möchte nur den Datumsteil aus einem Zeitstempel in PostgreSQL extrahieren.
Es muss ein postgresql DATE
-Typ sein, damit ich es in eine andere Tabelle einfügen kann, die einen DATE
-Wert erwartet.
Wenn ich zum Beispiel 2011/05/26 09:00:00
habe, möchte ich 2011/05/26
Ich habe versucht, Casting, aber ich bekomme nur 2011:
timestamp:date
cast(timestamp as date)
Ich habe to_char()
mit to_date()
versucht:
SELECT to_date(to_char(timestamp, 'YYYY/MM/DD'), 'YYYY/MM/DD')
FROM val3 WHERE id=1;
Ich habe versucht, es zu einer Funktion zu machen:
CREATE OR REPLACE FUNCTION testing() RETURNS void AS '
DECLARE i_date DATE;
BEGIN
SELECT to_date(to_char(val1, "YYYY/MM/DD"),"YYYY/MM/DD")
INTO i_date FROM exampTable WHERE id=1;
INSERT INTO foo(testd) VALUES (i);
END
Was ist der beste Weg, um ein Datum (JJJJ/MM/TT) aus einem Zeitstempel in PostgreSQL zu extrahieren?
Sie können Ihren Zeitstempel auf ein Datum übertragen, indem Sie ihm ::date
hinzufügen. Hier ist in psql ein Zeitstempel:
# select '2010-01-01 12:00:00'::timestamp;
timestamp
---------------------
2010-01-01 12:00:00
Jetzt werden wir es auf ein Datum werfen:
wconrad=# select '2010-01-01 12:00:00'::timestamp::date;
date
------------
2010-01-01
Auf der anderen Seite können Sie die Funktion date_trunc
verwenden. Der Unterschied besteht darin, dass letzterer denselben Datentyp wie timestamptz
zurückgibt, wobei Ihre Zeitzone intakt bleibt (falls erforderlich).
=> select date_trunc('day', now());
date_trunc
------------------------
2015-12-15 00:00:00+02
(1 row)
Verwenden Sie die Datum Funktion:
select date(timestamp_field) from table
Von einer Zeichenfelddarstellung bis zu einem Datum können Sie Folgendes verwenden:
select date(substring('2011/05/26 09:00:00' from 1 for 10));
Testcode:
create table test_table (timestamp_field timestamp);
insert into test_table (timestamp_field) values(current_timestamp);
select timestamp_field, date(timestamp_field) from test_table;
Testergebnis:
Haben Sie versucht, es mit <mydatetime>::date
auf ein Datum zu übertragen?
Das funktioniert bei mir in python 2.7
select some_date::DATE from some_table;
CREATE TABLE sometable (t TIMESTAMP, d DATE);
INSERT INTO sometable SELECT '2011/05/26 09:00:00';
UPDATE sometable SET d = t; -- OK
-- UPDATE sometable SET d = t::date; OK
-- UPDATE sometable SET d = CAST (t AS date); OK
-- UPDATE sometable SET d = date(t); OK
SELECT * FROM sometable ;
t | d
---------------------+------------
2011-05-26 09:00:00 | 2011-05-26
(1 row)
Ein weiteres Testkit:
SELECT pg_catalog.date(t) FROM sometable;
date
------------
2011-05-26
(1 row)
SHOW datestyle ;
DateStyle
-----------
ISO, MDY
(1 row)
Tun Sie einfach select date(timestamp_column)
und Sie würden den einzigen Datumsteil erhalten. Wenn Sie select timestamp_column::date
ausführen, wird möglicherweise date 00:00:00
zurückgegeben, wobei der 00:00:00
-Teil nicht entfernt wird. Aber ich habe gesehen, dass date(timestamp_column)
in allen Fällen perfekt funktioniert. Hoffe das hilft.