- Catégories :
TO_DATE , DATE¶
Convertit une expression d’entrée en date :
Pour une expression VARCHAR, résultat de la conversion de la chaîne en date.
Pour une expression TIMESTAMP, date de l’horodatage.
Pour une expression VARIANT :
Si la VARIANT contient une chaîne, une conversion de chaîne est effectuée.
Si la VARIANT contient une date, la valeur de date est conservée telle quelle.
Si la VARIANT contient une valeur nulle JSON, la sortie est NULL.
Pour une entrée NULL, la sortie est NULL.
Pour toutes les autres valeurs, une erreur de conversion est générée.
- Voir aussi :
Syntaxe¶
TO_DATE( <string_expr> [, <format> ] )
TO_DATE( <timestamp_expr> )
TO_DATE( '<integer>' )
TO_DATE( <variant_expr> )
DATE( <string_expr> [, <format> ] )
DATE( <timestamp_expr> )
DATE( '<integer>' )
DATE( <variant_expr> )
Arguments¶
Obligatoire :
Une des options :
string_expr
Chaîne à partir de laquelle extraire une date. Par exemple :
'2024-01-31'
.timestamp_expr
Expression TIMESTAMP. La portion DATE de la valeur TIMESTAMP est extraite.
'integer'
Expression qui est évaluée sur (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 de cette fonction.variant_expr
Expression de type VARIANT.
VARIANT doit contenir l’un des éléments suivants :
Une chaîne à partir de laquelle extraire une date.
Une date.
Chaîne contenant un entier qui représente le nombre de secondes ou de millisecondes.
Bien que TO_DATE accepte une valeur TIMESTAMP, il n’accepte pas de valeur TIMESTAMP dans une VARIANT.
Facultatif :
format
Spécificateur de format de date pour
string_expr
ou AUTO, qui précise que Snowflake détecte automatiquement le format à utiliser. Pour plus d’informations, voir Formats de date et d’heure dans les fonctions de conversion.La valeur par défaut est la valeur actuelle du paramètre de session DATE_INPUT_FORMAT (
AUTO
par défaut).
Renvoie¶
Le type de données de la valeur renvoyée est DATE. Si l’entrée est NULL, renvoie NULL.
Notes sur l’utilisation¶
Le format d’affichage des dates dans la sortie est déterminé par le paramètre de session DATE_OUTPUT_FORMAT (par défaut,
YYYY-MM-DD
).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.
Si plusieurs lignes sont évaluées (par exemple, si l’entrée est le nom de colonne d’une table qui contient plus d’une ligne), chaque valeur est examinée indépendamment pour déterminer si elle représente des secondes, des millisecondes, des microsecondes ou des nanosecondes.
Exemples¶
Les exemples suivants utilisent les fonctions TO_DATE et DATE.
Exemple de base¶
SELECT TO_DATE('2024-05-10'), DATE('2024-05-10');
+-----------------------+--------------------+
| TO_DATE('2024-05-10') | DATE('2024-05-10') |
|-----------------------+--------------------|
| 2024-05-10 | 2024-05-10 |
+-----------------------+--------------------+
Exemple qui extrait la date d’un horodatage¶
La fonction TO_DATE accepte les valeurs TIMESTAMP et les chaînes au format TIMESTAMP, mais ignore les informations de temps (heures, minutes, etc.).
Créer et charger la table :
CREATE OR REPLACE TABLE date_from_timestamp(ts TIMESTAMP);
INSERT INTO date_from_timestamp(ts)
VALUES (TO_TIMESTAMP('2024.10.02 04:00:00', 'YYYY.MM.DD HH:MI:SS'));
Interroger la valeur TIMESTAMP dans la table :
SELECT ts FROM date_from_timestamp;
+-------------------------+
| TS |
|-------------------------|
| 2024-10-02 04:00:00.000 |
+-------------------------+
Interroger la valeur TIMESTAMP dans la table en utilisant la fonction TO_DATE :
SELECT TO_DATE(ts) FROM date_from_timestamp;
+-------------+
| TO_DATE(TS) |
|-------------|
| 2024-10-02 |
+-------------+
Exemples utilisant différents formats d’entrée¶
Les exemples suivants utilisent les fonctions TO_DATE et DATE avec différentes spécifications de format d’entrée. Le format de date dans la sortie renvoyée est déterminé par la définition du paramètre de session DATE_OUTPUT_FORMAT.
SELECT TO_DATE('2024.05.10', 'YYYY.MM.DD'), DATE('2024.05.10', 'YYYY.MM.DD');
+-------------------------------------+----------------------------------+
| TO_DATE('2024.05.10', 'YYYY.MM.DD') | DATE('2024.05.10', 'YYYY.MM.DD') |
|-------------------------------------+----------------------------------|
| 2024-05-10 | 2024-05-10 |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('2024-05-10', 'AUTO'), DATE('2024-05-10', 'AUTO');
+-------------------------------+----------------------------+
| TO_DATE('2024-05-10', 'AUTO') | DATE('2024-05-10', 'AUTO') |
|-------------------------------+----------------------------|
| 2024-05-10 | 2024-05-10 |
+-------------------------------+----------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/20/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 2024-05-10 | 2024-05-20 |
+-------------------------------------+----------------------------------+
Exemples utilisant différents formats de sortie¶
Les exemples suivants montrent les résultats des requêtes lorsque le paramètre de session DATE_OUTPUT_FORMAT est défini sur DD-MON-YYYY
:
ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DD-MON-YYYY';
SELECT TO_DATE('2024-05-10', 'YYYY-MM-DD'), DATE('2024-05-10', 'YYYY-MM-DD');
+-------------------------------------+----------------------------------+
| TO_DATE('2024-05-10', 'YYYY-MM-DD') | DATE('2024-05-10', 'YYYY-MM-DD') |
|-------------------------------------+----------------------------------|
| 10-May-2024 | 10-May-2024 |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/10/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 10-May-2024 | 10-May-2024 |
+-------------------------------------+----------------------------------+
Exemples utilisant une chaîne contenant un entier¶
Lorsque l’entrée est une chaîne qui contient un nombre entier, la magnitude de ce nombre entier détermine si elle est interprétée comme des secondes, des millisecondes, etc. L’exemple suivant montre comment la fonction sélectionne les unités à utiliser (secondes, millisecondes, microsecondes ou nanosecondes) en fonction de l’ampleur de la valeur.
Créer et charger la table :
CREATE OR REPLACE TABLE demo1 (
description VARCHAR,
value VARCHAR -- string rather than bigint
);
INSERT INTO demo1 (description, value) VALUES
('Seconds', '31536000'),
('Milliseconds', '31536000000'),
('Microseconds', '31536000000000'),
('Nanoseconds', '31536000000000000');
Passez les chaînes à la fonction :
SELECT description,
value,
TO_TIMESTAMP(value),
TO_DATE(value)
FROM demo1
ORDER BY value;
+--------------+-------------------+-------------------------+----------------+
| DESCRIPTION | VALUE | TO_TIMESTAMP(VALUE) | TO_DATE(VALUE) |
|--------------+-------------------+-------------------------+----------------|
| Seconds | 31536000 | 1971-01-01 00:00:00.000 | 1971-01-01 |
| Milliseconds | 31536000000 | 1971-01-01 00:00:00.000 | 1971-01-01 |
| Microseconds | 31536000000000 | 1971-01-01 00:00:00.000 | 1971-01-01 |
| Nanoseconds | 31536000000000000 | 1971-01-01 00:00:00.000 | 1971-01-01 |
+--------------+-------------------+-------------------------+----------------+