304 votes

Extraire la date (aaaa / mm / jj) d'un horodatage dans PostgreSQL

Je veux extraire juste la partie de la date à partir d'un timestamp dans PostgreSQL.

J'ai besoin d'elle pour être un postgresql DATE type afin que je puisse l'insérer dans une autre table qui s'attend à un DATE de la valeur.

Par exemple, si j'ai 2011/05/26 09:00:00, je veux 2011/05/26

J'ai essayé de casting, mais je ne reçois 2011:

timestamp:date
cast(timestamp as date)

J'ai essayé d' to_char() avec to_date():

SELECT to_date(to_char(timestamp, 'YYYY/MM/DD'), 'YYYY/MM/DD') 
FROM val3 WHERE id=1;

J'ai essayé de faire une fonction:

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

Quelle est la meilleure façon d'extraire la date (aaaa/mm/jj) à partir d'un timestamp dans PostgreSQL?

514voto

Wayne Conrad Points 31052

Vous pouvez attribuer une date à votre horodatage en y ajoutant le suffixe ::date . Voici, en psql, un horodatage:

 # select '2010-01-01 12:00:00'::timestamp;
      timestamp      
---------------------
 2010-01-01 12:00:00
 

Maintenant, nous allons lancer une date:

 wconrad=# select '2010-01-01 12:00:00'::timestamp::date;
    date    
------------
 2010-01-01
 

123voto

JamesA Points 14729

Utilisez la fonction de date :

 select date(timestamp_field) from table
 

D'une représentation de champ de caractère à une date, vous pouvez utiliser:

 select date(substring('2011/05/26 09:00:00' from 1 for 10));
 

Code de test:

 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;
 

Résultat du test:

résultat pgAdmin

Résultat pgAdmin large

13voto

leonbloy Points 27119

Avez-vous essayé de le lancer à une date, avec <mydatetime>::date ?

5voto

Grzegorz Szpetkowski Points 10225
 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)
 

Un autre kit de test:

 SELECT pg_catalog.date(t) FROM sometable;
    date    
------------
 2011-05-26
(1 row)

SHOW datestyle ;
 DateStyle 
-----------
 ISO, MDY
(1 row)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X