it-swarm.com.de

Extrahieren Sie das Datum (JJJJ / MM / TT) aus einem Zeitstempel in PostgreSQL

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?

210
keren

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)
379
Wayne Conrad

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:

pgAdmin result

pgAdmin result wide

90
jamesallman

Haben Sie versucht, es mit <mydatetime>::date auf ein Datum zu übertragen?

9
leonbloy

Das funktioniert bei mir in python 2.7

 select some_date::DATE from some_table;
8
thedarkgriffen
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.

2
Koushik Das