PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come to_date() funziona in PostgreSQL

In PostgreSQL, puoi usare to_date() funzione per convertire una stringa in una data.

Sintassi

La sintassi è questa:

to_date(text, text)

Dove il primo argomento è una rappresentazione di stringa della data e il secondo argomento definisce il modello utilizzato dal primo argomento.

Esempio

Ecco un esempio di base da dimostrare.

SELECT to_date('10 Feb 2010', 'DD Mon YYYY');

Risultato:

2010-02-10

Modelli

Il secondo argomento fornisce il modello in cui viene fornito il primo argomento. A volte viene indicato come una "stringa di formato".

Il modello è costituito da uno o più modelli di modello e, facoltativamente, da uno o più modificatori di modello di modello.

Modelli di modello

Utilizzando l'esempio precedente, DD è un modello di modello e Mon è un modello di modello. YYYY è anche un modello di modello. Questi sono stati tutti combinati per formare il modello.

Puoi spostare ogni modello di modello come richiesto. E puoi utilizzare modelli di modelli completamente diversi.

Ecco alcuni altri esempi che utilizzano la stessa data, ma in formati diversi (e quindi utilizzando modelli diversi).

\x
SELECT 
  to_date('10 Feb 2010', 'DD Mon YYYY') AS "DD Mon YYYY",
  to_date('Feb 10 2010', 'Mon DD YYYY') AS "Mon DD YYYY",
  to_date('10/02/2010', 'DD/MM/YYYY') AS "DD/MM/YYYY",
  to_date('02/10/2010', 'MM/DD/YYYY') AS "MM/DD/YYYY",
  to_date('02-10-2010', 'MM-DD-YYYY') AS "MM-DD-YYYY",  
  to_date('02102010', 'MMDDYYYY') AS "MMDDYYYY",
  to_date('02-10-10', 'MM-DD-YY') AS "MM-DD-YY";

Risultato (usando l'output verticale):

DD Mon YYYY | 2010-02-10
Mon DD YYYY | 2010-02-10
DD/MM/YYYY  | 2010-02-10
MM/DD/YYYY  | 2010-02-10
MM-DD-YYYY  | 2010-02-10
MMDDYYYY    | 2010-02-10
MM-DD-YY    | 2010-02-10

Quindi usano tutti la stessa data, ma la data viene fornita in formati diversi. È compito del modello specificare esplicitamente a Postgres in quale formato è stata fornita la data.

Come probabilmente puoi immaginare, se non avessimo fornito il modello, alcune date potrebbero essere interpretate nel modo sbagliato, soprattutto se la data utilizza una lingua diversa per il suo formato.

Ad esempio, 01/03/2010 potrebbe essere interpretato come il primo marzo o il terzo gennaio, a seconda della località.

Modificatori del modello di modello

A volte potrebbe anche essere necessario aggiungere un modificatore del modello di modello al modello.

Ad esempio, se la tua data utilizza un suffisso di numero ordinale, dovrai assicurarti che venga interpretato come tale.

SELECT 
  to_date('10th Feb 2010', 'DDth Mon YYYY') AS "10th Feb 2010",
  to_date('01st Feb 2010', 'DDth Mon YYYY') AS "01st Feb 2010",
  to_date('03rd Feb 2010', 'DDth Mon YYYY') AS "03rd Feb 2010";

Risultato (usando l'output verticale):

10th Feb 2010 | 2010-02-10
01st Feb 2010 | 2010-02-01
03rd Feb 2010 | 2010-02-03

Se non avessi utilizzato il modificatore del modello di modello, avrei ricevuto un errore durante l'utilizzo di quelle date.

Ecco un esempio per illustrare.

SELECT to_date('10th Feb 2010', 'DD Mon YYYY');

Risultato:

ERROR: invalid value "th" for "Mon"
DETAIL: The given value did not match any of the allowed values for this field.

Elenco completo di modelli e modificatori di modelli

Postgres include molti più modelli e modificatori di modelli.

Questi possono essere utilizzati anche durante la formattazione di valori di data/ora (ad esempio quando si utilizza to_char() funzione per convertire un timestamp in una stringa).

Vedi Modelli e modificatori di modelli per la formattazione di data/ora in PostgreSQL per un elenco completo.