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

Comment to_timestamp() fonctionne dans PostgreSQL

Selon la documentation PostgreSQL, il existe deux fonctions appelées to_timestamp() :

  • On convertit l'époque Unix en un horodatage. L'époque Unix est le nombre de secondes depuis 1970-01-01 00:00:00+00.
  • L'autre convertit une chaîne en horodatage.

Plus précisément, chaque fonction convertit la valeur en un horodatage avec fuseau horaire valeur.

Bien que la documentation de Postgres les présente comme deux éléments distincts to_timestamp() fonctions, je les présente comme s'il s'agissait d'une fonction qui accepte soit un argument, soit deux.

Syntaxe

Vous pouvez utiliser to_timestamp() des manières suivantes :

to_timestamp(double precision)
to_timestamp(text, text)

En utilisant la première syntaxe, l'argument est fourni sous la forme d'une double précision valeur, et c'est la valeur Epoch, en double précision que vous voulez convertir en horodatage.

En utilisant la seconde syntaxe, le premier argument est la date et le second argument est la chaîne de format.

Convertir l'époque Unix

Voici un exemple de base pour montrer comment convertir l'époque en horodatage.

SELECT to_timestamp(1658792421);

Résultat :

2022-07-26 09:40:21+10

Dans mon cas, le décalage horaire est de +10 et c'est donc ce qui est renvoyé.

Fraction de seconde

Voici un exemple avec des fractions de seconde.

SELECT to_timestamp(1658792421.123456);

Résultat :

2022-07-26 09:40:21.123456+10

Formatage

Voici un exemple d'utilisation de la deuxième syntaxe pour formater une valeur de date.

SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');

Résultat :

2022-10-21 00:00:00+10

Le deuxième argument est fourni pour indiquer comment le premier argument est formaté.

Voici un autre format afin d'illustrer davantage ce point.

SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');

Résultat :

2022-10-21 00:00:00+10

Si le format du deuxième argument ne correspond pas au format du premier argument, vous pouvez vous retrouver avec une erreur.

Par exemple :

SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');

Résultat :

ERROR: invalid value "ober" for "YYYY"
DETAIL: Value must be an integer.

La chaîne de format (deuxième argument) peut être n'importe quel modèle de modèle avec un modificateur facultatif.

Voici une liste complète des modèles de modèles et des modificateurs que vous pouvez utiliser avec cette fonction.

Le type de retour

Comme mentionné, le type de retour est horodatage avec fuseau horaire . Nous pouvons vérifier cela avec le pg_typeof() fonction.

SELECT pg_typeof(to_timestamp(1658792421.123456));

Résultat :

timestamp with time zone

Extraire des parties de date

Vous pouvez utiliser diverses méthodes pour extraire les parties de date de la valeur d'horodatage.

Par exemple, vous pouvez utiliser le extract() fonction.

SELECT extract('month' from to_timestamp(1658792421));

Résultat :

7

Et vous pouvez utiliser le to_char() fonction si vous devez faire quelque chose comme afficher le nom du mois au lieu du numéro du mois.

SELECT to_char(to_timestamp(1658792421), 'Month');

Résultat :

July

Et ici, il utilise la syntaxe de formatage.

SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');

Résultat :

October

Si vous n'avez que le numéro du mois, vous pouvez utiliser l'exemple suivant pour convertir le numéro du mois en nom de mois.

SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');

Résultat :

March

Et vice-versa (convertir le nom du mois en numéro de mois).

Dans l'exemple suivant, j'extrait le numéro du mois en utilisant date_part() comme alternative à extract() .

SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));

Résultat :

3