web-dev-qa-db-fra.com

PostgreSQL: distribution de la chaîne à la date JJ / MM / AAAA

J'essaie de convertir une colonne CHARACTER VARYING en DATE, mais j'ai besoin d'un format de date comme celui-ci: JJ/MM/AAAA. J'utilise le code SQL suivant:

ALTER TABLE test ALTER COLUMN date TYPE DATE using to_date(date, 'DD/MM/YYYY');

Le résultat est une date comme celle-ci: AAAA-MM-JJ.

Comment puis-je obtenir le format JJ/MM/AAAA?

Merci beaucoup d'avance !

Thomas

32
wiltomap

Une colonne DATE n'a pas de format. Vous ne pouvez pas spécifier un format pour cela.

Vous pouvez utiliser DateStyle pour contrôler la manière dont PostgreSQL émet des dates, mais c'est global et un peu limité.

Au lieu de cela, vous devriez utiliser to_char pour formater la date à laquelle vous l'interrogez ou la formater dans l'application cliente. Comme:

SELECT to_char("date", 'DD/MM/YYYY') FROM mytable;

par exemple.

regress=> SELECT to_char(DATE '2014-04-01', 'DD/MM/YYYY');
  to_char   
------------
 01/04/2014
(1 row)
66
Craig Ringer

https://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-OUTPUT

Le format de sortie des types date/heure peut être défini sur l’un des quatre styles ISO 8601, SQL (Ingres), POSTGRES traditionnel (format de date Unix) ou allemand. Le format par défaut est le format ISO.

Donc, ce format particulier peut être contrôlé avec la sortie date/heure postgres, par exemple:

t=# select now();
              now
-------------------------------
 2017-11-29 09:15:25.348342+00
(1 row)

t=# set datestyle to DMY, SQL;
SET
t=# select now();
              now
-------------------------------
 29/11/2017 09:15:31.28477 UTC
(1 row)

t=# select now()::date;
    now
------------
 29/11/2017
(1 row)

Rappelez-vous que, comme Craig l'a mentionné dans sa réponse, modifier datestyle modifiera également (et à la première rotation) la façon dont postgres analyse la date.

5
Vao Tsun