Catégories :

Fonctions de conversion

TRY_TO_TIMESTAMP / TRY_TO_TIMESTAMP_*

Une version spéciale de TO_TIMESTAMP / TO_TIMESTAMP_* qui effectue la même opération (c’est-à-dire convertit une expression d’entrée en horodatage), mais avec une prise en charge du traitement des erreurs (c’est-à-dire que si la conversion ne peut pas être effectuée, elle retourne une valeur NULL au lieu de produire une erreur).

Pour plus d’informations, voir Fonctions de conversion de traitement des erreurs.

Note

TRY_TO_TIMESTAMP mappe vers l’une des autres fonctions d’horodatage, en fonction du paramètre de session TIMESTAMP_TYPE_MAPPING. Le paramètre par défaut est TIMESTAMP_NTZ de sorte que TRY_TO_TIMESTAMP est mappé sur TRY_TO_TIMESTAMP_NTZ par défaut.

Voir aussi :

TO_TIMESTAMP / TO_TIMESTAMP_*

Syntaxe

timestampFunction ( <string_expr> [, <format> ] )
timestampFunction ( '<integer>' )

Où :

timestampFunction ::=
    TRY_TO_TIMESTAMP | TRY_TO_TIMESTAMP_LTZ | TRY_TO_TIMESTAMP_NTZ | TRY_TO_TIMESTAMP_TZ

Arguments

Obligatoire :

Une des options :

expr_chaîne

L’argument doit être une chaîne pouvant correspondre à TIMESTAMP (TIMESTAMP_NTZ, TIMESTAMP_LTZ ou TIMESTAMP_TZ).

entier

Expression qui correspond à une chaîne contenant un entier, par exemple « 15000000 ». Selon l’ampleur de la chaîne, elle peut être interprétée comme des secondes, des millisecondes, des microsecondes ou des nanosecondes. Pour plus de détails, voir les notes sur l’utilisation ci-dessous.

L’utilisation d’entiers entre guillemets comme entrées est obsolète.

Facultatif :

format

Spécificateur de format pour expr_chaîne ou AUTO. Pour plus d’informations, voir Formats de date et heure dans les fonctions de conversion.

La valeur par défaut est la valeur actuelle du paramètre de session TIMESTAMP_INPUT_FORMAT (généralement AUTO).

Renvoie

Le type de données de la valeur renvoyée est l’un des types de données TIMESTAMP. Par défaut, le type de données est TIMESTAMP_NTZ. Vous pouvez changer cela en définissant le paramètre de session TIMESTAMP_TYPE_MAPPING.

Notes sur l’utilisation

  • Si le format du paramètre d’entrée est une chaîne contenant un entier :

    • Une fois la chaîne convertie en entier, l’entier est traité comme un nombre de secondes, millisecondes, microsecondes ou nanosecondes après le début de l’epoch Unix (1970-01-01 00:00:00.000000000 UTC).

      • Si l’entier est inférieur à 31536000000 (le nombre de millisecondes dans une année), alors la valeur est traitée comme un nombre de secondes.

      • Si la valeur est supérieure ou égale à 31536000000 et inférieure à 31536000000000, la valeur est alors traitée en millisecondes.

      • Si la valeur est supérieure ou égale à 31536000000000 et inférieure à 31536000000000000, la valeur est alors traitée en microsecondes.

      • Si la valeur est supérieure ou égale à 31536000000000000, alors la valeur est traitée comme des nanosecondes.

      Prudence

      Actuellement, les valeurs négatives sont toujours traitées comme des secondes. Par exemple, -31536000000000000000 est traité comme un nombre de secondes avant l’année 1970, bien que son échelle implique qu’il est destiné à être utilisé comme nanosecondes.

      Ce comportement pourrait changer à l’avenir.

      Prudence

      Avertissement de dépréciation : les futures versions de Snowflake pourraient interpréter automatiquement les valeurs entières converties en chaînes comme des secondes plutôt que comme des millisecondes, microsecondes ou nanosecondes. Snowflake vous recommande d’appeler TO_DATE, TO_TIME ou TO_TIMESTAMP avec des chaînes qui contiennent des entiers uniquement lorsque ces entiers sont destinés à être interprétés comme des secondes.

    • Si plusieurs lignes sont évaluées (par exemple, si l’entrée est le nom de colonne d’une table qui contient plus de deux lignes), la première valeur traitée détermine si toutes les valeurs suivantes sont traitées en secondes, millisecondes, microsecondes ou nanosecondes.

      Si la première valeur est supérieure ou égale à 31536000000, toutes les valeurs seront traitées en millisecondes, même si certaines valeurs restantes sont inférieures à 31536000000. Une logique similaire s’applique aux microsecondes et nanosecondes.

Exemples

Ceci illustre l’utilisation de TRY_TO_TIMESTAMP :

SELECT TRY_TO_TIMESTAMP('2018-09-15 12:30:00'), TRY_TO_TIMESTAMP('Invalid');
+-----------------------------------------+-----------------------------+
| TRY_TO_TIMESTAMP('2018-09-15 12:30:00') | TRY_TO_TIMESTAMP('INVALID') |
|-----------------------------------------+-----------------------------|
| 2018-09-15 12:30:00.000                 | NULL                        |
+-----------------------------------------+-----------------------------+