Catégories :

Fonctions de date et d’heure

CONVERT_TIMEZONE

Convertit un horodatage en un autre fuseau horaire.

Syntaxe

CONVERT_TIMEZONE( <source_tz> , <target_tz> , <source_timestamp_ntz> )

CONVERT_TIMEZONE( <target_tz> , <source_timestamp> )
Copy

Arguments

source_tz

Chaîne spécifiant le fuseau horaire pour l’horodatage entré. Requis pour les horodatages sans fuseau horaire (c’est-à-dire TIMESTAMP_NTZ).

target_tz

Chaîne spécifiant le fuseau horaire dans lequel l’horodatage d’entrée est converti.

source_timestamp_ntz

Pour la version à 3 arguments, chaîne spécifiant l’horodatage à convertir (doit être TIMESTAMP_NTZ).

source_timestamp

Pour la version à 2 arguments, chaîne spécifiant l’horodatage à convertir (peut être toute variante d’horodatage, y compris TIMESTAMP_NTZ).

Renvoie

Renvoie une valeur de type TIMESTAMP_NTZ, TIMESTAMP_TZ ou NULL :

  • Pour la version à 3 arguments, renvoie une valeur de type TIMESTAMP_NTZ.

  • Pour la version à 2 arguments, renvoie une valeur de type TIMESTAMP_TZ.

  • Si un argument est NULL, renvoie NULL.

Notes sur l’utilisation

  • Le format d’affichage des horodatages dans la sortie est déterminé par le format de sortie de l’horodatage pour la session en cours et le type de données de la valeur d’horodatage renvoyée.

  • Pour la version à 3 arguments, l’heure « horloge murale » dans le résultat représente le même moment que l’entrée « horloge murale » dans le fuseau horaire d’entrée, mais dans le fuseau horaire cible.

  • Pour la version à 2 arguments, l’argument source_timestamp inclut généralement le fuseau horaire. Si la valeur est de type TIMESTAMP_TZ, le fuseau horaire est extrait de sa valeur. Sinon, le fuseau horaire de la session en cours est utilisé.

  • Pour source_tz et target_tz, vous pouvez spécifier un nom de fuseau horaire ou un nom de lien de la version 2021a de la base de données de fuseaux horaires (IANA) (par exemple, America/Los_Angeles, Europe/London, UTC, Etc/GMT, etc.).

    Note

    • Les noms de fuseaux horaires sont sensibles à la casse et doivent être entre guillemets simples (par ex. 'UTC').

    • Snowflake ne prend pas en charge la majorité des abréviations de fuseaux horaires (par exemple, PDT, EST, etc.) car une abréviation donnée peut faire référence à plusieurs fuseaux horaires différents. Par exemple, CST peut faire référence à l’heure normale centrale en Amérique du Nord (UTC-6), à l’heure normale de Cuba (UTC-5) et à l’heure normale de Chine (UTC+8).

Exemples

Pour utiliser le format de sortie de l’horodatage par défaut pour les horodatages renvoyés dans les exemples, désactivez le paramètre TIMESTAMP_OUTPUT_FORMAT dans la session en cours :

ALTER SESSION UNSET TIMESTAMP_OUTPUT_FORMAT;
Copy

Exemples qui spécifient un fuseau horaire source

Les exemples suivants utilisent la version à 3 arguments de la fonction CONVERT_TIMEZONE et spécifient une valeur source_tz. Ces exemples renvoient des valeurs TIMESTAMP_NTZ.

Convertir une heure « horloge murale » à Los Angeles en heure « horloge murale » correspondante à New York :

SELECT CONVERT_TIMEZONE(
  'America/Los_Angeles',
  'America/New_York',
  '2024-01-01 14:00:00'::TIMESTAMP_NTZ
) AS conv;
Copy
+-------------------------+
| CONV                    |
|-------------------------|
| 2024-01-01 17:00:00.000 |
+-------------------------+

Convertir une heure « horloge murale » à Varsovie en heure « horloge murale » correspondante en UTC :

SELECT CONVERT_TIMEZONE(
  'Europe/Warsaw',
  'UTC',
  '2024-01-01 00:00:00'::TIMESTAMP_NTZ
) AS conv;
Copy
+-------------------------+
| CONV                    |
|-------------------------|
| 2023-12-31 23:00:00.000 |
+-------------------------+

Exemples qui ne précisent pas de fuseau horaire source

Les exemples suivants utilisent la version à 2 arguments de la fonction CONVERT_TIMEZONE. Ces exemples renvoient des valeurs TIMESTAMP_TZ. Par conséquent, les valeurs renvoyées incluent un décalage qui montre la différence entre le fuseau horaire de l’horodatage et le temps universel coordonné (UTC). Par exemple, le fuseau horaire America/Los_Angeles a un décalage de -0700 pour montrer qu’il a sept heures de retard UTC.

Convertir une chaîne spécifiant une valeur TIMESTAMP_TZ dans un fuseau horaire différent :

SELECT CONVERT_TIMEZONE(
  'America/Los_Angeles',
  '2024-04-05 12:00:00 +02:00'
) AS time_in_la;
Copy
+-------------------------------+
| TIME_IN_LA                    |
|-------------------------------|
| 2024-04-05 03:00:00.000 -0700 |
+-------------------------------+

Afficher l’heure actuelle de « l’horloge murale » dans différents fuseaux horaires :

SELECT
  CURRENT_TIMESTAMP() AS now_in_la,
  CONVERT_TIMEZONE('America/New_York', CURRENT_TIMESTAMP()) AS now_in_nyc,
  CONVERT_TIMEZONE('Europe/Paris', CURRENT_TIMESTAMP()) AS now_in_paris,
  CONVERT_TIMEZONE('Asia/Tokyo', CURRENT_TIMESTAMP()) AS now_in_tokyo;
Copy
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
| NOW_IN_LA                     | NOW_IN_NYC                    | NOW_IN_PARIS                  | NOW_IN_TOKYO                  |
|-------------------------------+-------------------------------+-------------------------------+-------------------------------|
| 2024-06-12 08:52:53.114 -0700 | 2024-06-12 11:52:53.114 -0400 | 2024-06-12 17:52:53.114 +0200 | 2024-06-13 00:52:53.114 +0900 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+