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> )

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).

cible_tz

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

source_horodatage_ntz

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

source_horodatage

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

Notes sur l’utilisation

  • 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 de destination.

    • La valeur renvoyée est toujours de type TIMESTAMP_NTZ.

  • Pour la version à 2 arguments :

    • L’argument horodatage_source est considéré comme incluant 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é.

    • La valeur renvoyée est toujours de type TIMESTAMP_TZ.

  • Snowflake prend en charge les fuseaux horaires standard iana.org : Amérique /Los_Angeles, Europe/Londres, UTC, Etc/GMT, etc. Toutefois, certains fuseaux horaires simples, tels que PDT, ne sont actuellement pas pris en charge.

    Pour obtenir une liste des fuseaux horaires, voir Fuseaux horaires de la base de données tz (dans Wikipédia).

  • Les noms de fuseaux horaires sont sensibles à la casse et doivent être placés entre guillemets simples.

Exemples

ALTER SESSION SET timestamp_output_format = 'YYYY-MM-DD HH24:MI:SS';

-- Convert a "wallclock" time in Los Angelese to the matching "wallclock" time in New York

SELECT CONVERT_TIMEZONE('America/Los_Angeles', 'America/New_York', '2019-01-01 14:00:00'::timestamp_ntz) AS conv;

+-------------------------+
| CONV                    |
|-------------------------|
| 2019-01-01 17:00:00.000 |
+-------------------------+

-- Convert a "wallclock" time in Warsaw to the matching "wallclock" time in UTC

SELECT CONVERT_TIMEZONE('Europe/Warsaw', 'UTC', '2019-01-01 00:00:00'::timestamp_ntz) AS conv;

+-------------------------+
| CONV                    |
|-------------------------|
| 2018-12-31 23:00:00.000 |
+-------------------------+
ALTER SESSION UNSET timestamp_output_format;

-- Convert TIMESTAMP_TZ to a different time zone and include the time zone in the result

SELECT CONVERT_TIMEZONE('America/Los_Angeles', '2018-04-05 12:00:00 +02:00') AS time_in_la;

+-------------------------------+
| TIME_IN_LA                    |
|-------------------------------|
| 2018-04-05 03:00:00.000 -0700 |
+-------------------------------+
ALTER SESSION UNSET timestamp_output_format;

-- Show the current "wallclock" time in different time zones

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;

+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
| NOW_IN_LA                     | NOW_IN_NYC                    | NOW_IN_PARIS                  | NOW_IN_TOKYO                  |
|-------------------------------+-------------------------------+-------------------------------+-------------------------------|
| 2019-01-11 14:23:08.497 -0800 | 2019-01-11 17:23:08.497 -0500 | 2019-01-11 23:23:08.497 +0100 | 2019-01-12 07:23:08.497 +0900 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+