2014-06-19 13 views
19

Sto provando a trasmettere una colonna CHARACTER VARYING a un DATE, ma ho bisogno di un formato di data come questo: GG/MM/AAAA. Io uso il seguente SQL:PostgreSQL: stringa di cast alla data DD/MM/YYYY

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

Il risultato è una data così: YYYY-MM-DD.

Come posso ottenere il formato GG/MM/AAAA?

Grazie mille in anticipo!

Thomas

risposta

42

Un DATE colonna non ha un formato. Non è possibile specificare un formato per questo.

È possibile utilizzare DateStyle per controllare come PostgreSQL emette le date, ma è globale e un po 'limitato.

Invece, è necessario utilizzare to_char per formattare la data quando si esegue una query o formattarla nell'applicazione client. Ad esempio:

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

, ad es.

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

OK grazie mille! Volevo assicurarmi che ciò non fosse possibile attraverso la funzione to_date(). – wiltomap

+0

@wiltomap Non lo è, dato che tutto 'to_date' fa è una data da una stringa. La data non ha un formato internamente, è solo un numero. –

+0

C'è un modo per cercare attraverso un DB in questo modo? Ad esempio: 'selezionare to_char (DATE my_column, 'DD/MM/YYYY') dall'ordine my_table di (DATE my_column) desc'? – antjanus

0

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

Il formato di output dei tipi data/ora può essere impostata su uno dei quattro stili ISO 8601, SQL (Ingres), POSTGRES tradizionali (Unix formato data ), o tedesco. L'impostazione predefinita è il formato ISO.

Quindi questo particolare formato può essere controllato con l'uscita tempo Postgres data, ad esempio:

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) 

mente che, come Craig menzionate nelle sua risposta, cambiando datestyle sarà anche (e in primo turno) cambiare il modo postgres analizza la data.

Problemi correlati