PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment to_date() fonctionne dans PostgreSQL

Dans PostgreSQL, vous pouvez utiliser le to_date() fonction pour convertir une chaîne en une date.

Syntaxe

La syntaxe ressemble à ceci :

to_date(text, text)

Où le premier argument est une représentation sous forme de chaîne de la date et le deuxième argument définit le modèle utilisé par le premier argument.

Exemple

Voici un exemple de base pour illustrer.

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

Résultat :

2010-02-10

Modèles

Le deuxième argument fournit le modèle dans lequel le premier argument est fourni. Ceci est parfois appelé "chaîne de format".

Le modèle se compose d'un ou plusieurs modèles de modèle et éventuellement d'un ou plusieurs modificateurs de modèle de modèle.

Modèles de modèle

En utilisant l'exemple précédent, DD est un modèle de modèle et Mon est un modèle de modèle. YYYY est également un modèle de modèle. Ceux-ci ont tous été combinés pour former le modèle.

Vous pouvez déplacer chaque modèle de modèle selon vos besoins. Et vous pouvez utiliser différents modèles de modèles.

Voici quelques exemples supplémentaires qui utilisent la même date, mais dans des formats différents (et donc, en utilisant des modèles différents).

\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";

Résultat (en utilisant la sortie 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

Ils utilisent donc tous la même date, mais la date est fournie dans des formats différents. C'est le travail du modèle de spécifier explicitement à Postgres dans quel format la date a été fournie.

Comme vous pouvez probablement l'imaginer, si nous ne fournissons pas le modèle, certaines dates pourraient être mal interprétées, en particulier si la date utilise des paramètres régionaux différents pour son format.

Par exemple, 01/03/2010 peut être interprété comme le premier mars ou le trois janvier, selon les paramètres régionaux.

Modificateurs de modèle de modèle

Parfois, vous devrez peut-être également ajouter un modificateur de modèle de modèle au modèle.

Par exemple, si votre date utilise un suffixe de nombre ordinal, vous devrez vous assurer qu'il est interprété comme tel.

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";

Résultat (en utilisant la sortie verticale) :

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

Si je n'avais pas utilisé le modificateur de modèle de modèle, j'aurais reçu une erreur lors de l'utilisation de ces dates.

Voici un exemple pour illustrer.

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

Résultat :

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

Liste complète des modèles de modèles et des modificateurs

Postgres inclut beaucoup plus de modèles de modèles et de modificateurs.

Ceux-ci peuvent également être utilisés lors du formatage des valeurs de date/heure (par exemple lors de l'utilisation de to_char() fonction pour convertir un horodatage en chaîne).

Voir Modèles de modèles et modificateurs pour le formatage de la date/heure dans PostgreSQL pour une liste complète.