> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentation du type de données DateTime64 dans ClickHouse, qui stocke des horodatages avec une précision inférieure à la seconde

# DateTime64

Permet de stocker un instant, pouvant être exprimé sous la forme d’une date calendaire et d’une heure de la journée, avec une précision inférieure à la seconde définie

Taille du tick (précision) : 10<sup>-precision</sup> secondes. Plage valide : \[ 0 : 9 ].
Les valeurs généralement utilisées sont 3 (millisecondes), 6 (microsecondes) et 9 (nanosecondes).

Valeur par défaut : 3 (millisecondes).

**Syntaxe :**

```sql theme={null}
DateTime64(precision, [timezone])
```

En interne, les données sont stockées sous la forme d’un certain nombre de « ticks » depuis le début de l’epoch (1970-01-01 00:00:00 UTC), sous forme d’Int64. La résolution des ticks est déterminée par le paramètre precision. De plus, le type `DateTime64` peut stocker un fuseau horaire identique pour toute la colonne, ce qui affecte la façon dont les valeurs du type `DateTime64` sont affichées au format texte ainsi que la façon dont les valeurs spécifiées sous forme de chaînes sont interprétées ('2020-01-01 05:00:01.000'). Le fuseau horaire n’est pas stocké dans les lignes de la table (ou dans le resultset), mais dans les métadonnées de la colonne. Voir les détails dans [DateTime](/fr/reference/data-types/datetime).

Plage de valeurs prise en charge : \[1900-01-01 00:00:00, 2299-12-31 23:59:59.999999999]

Le nombre de chiffres après le séparateur décimal dépend du paramètre precision.

Remarque : la précision de la valeur maximale est de 8. Si la précision maximale de 9 chiffres (nanosecondes) est utilisée, la valeur maximale prise en charge est `2262-04-11 23:47:16` en UTC.

<div id="examples">
  ## Exemples
</div>

1. Création d’une table avec une colonne de type `DateTime64` et insertion de données dans cette table :

```sql theme={null}
CREATE TABLE dt64
(
    `timestamp` DateTime64(3, 'Asia/Istanbul'),
    `event_id` UInt8
)
ENGINE = MergeTree;
```

```sql theme={null}
-- Parse DateTime
-- - from an integer interpreted as the number of milliseconds (because of precision 3) since 1970-01-01,
-- - from a decimal interpreted as the number of seconds before the decimal part, and based on the precision after the decimal point,
-- - from a string.

INSERT INTO dt64
VALUES
(1546300800123, 1),
(1546300800.123, 2),
('2019-01-01 00:00:00', 3);

SELECT * FROM dt64;
```

```text theme={null}
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00.123 │        1 │
│ 2019-01-01 03:00:00.123 │        2 │
│ 2019-01-01 00:00:00.000 │        3 │
└─────────────────────────┴──────────┘
```

* Lors de l’insertion d’une valeur datetime sous forme d’entier, elle est traitée comme un timestamp Unix (UTC) correctement mis à l’échelle. `1546300800000` (avec une précision de 3) représente `'2019-01-01 00:00:00'` UTC. Cependant, comme la colonne `timestamp` utilise le fuseau horaire `Asia/Istanbul` (UTC+3), lors de l’affichage sous forme de chaîne, la valeur sera affichée comme `'2019-01-01 03:00:00'`. Lors de l’insertion d’une valeur datetime sous forme décimale, elle est traitée de manière similaire à un entier, à ceci près que la valeur avant le point décimal correspond au timestamp Unix jusqu’aux secondes incluses, et la partie après le point décimal est traitée comme la précision.
* Lors de l’insertion d’une valeur de chaîne comme datetime, elle est considérée comme étant dans le fuseau horaire de la colonne. `'2019-01-01 00:00:00'` sera considéré comme appartenant au fuseau horaire `Asia/Istanbul` et stocké sous la forme `1546290000000`.

2. Filtrage sur les valeurs `DateTime64`

```sql theme={null}
SELECT * FROM dt64 WHERE timestamp = toDateTime64('2019-01-01 00:00:00', 3, 'Asia/Istanbul');
```

```text theme={null}
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 00:00:00.000 │        3 │
└─────────────────────────┴──────────┘
```

Contrairement à `DateTime`, les valeurs `DateTime64` ne sont pas automatiquement converties depuis `String`.

```sql theme={null}
SELECT * FROM dt64 WHERE timestamp = toDateTime64(1546300800.123, 3);
```

```text theme={null}
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00.123 │        1 │
│ 2019-01-01 03:00:00.123 │        2 │
└─────────────────────────┴──────────┘
```

Contrairement à l’opération `insert`, la fonction `toDateTime64` traite toutes les valeurs comme des valeurs décimales ; la précision doit donc
être indiquée après la virgule.

3. Récupération du fuseau horaire d’une valeur de type `DateTime64` :

```sql theme={null}
SELECT toDateTime64(now(), 3, 'Asia/Istanbul') AS column, toTypeName(column) AS x;
```

```text theme={null}
┌──────────────────column─┬─x──────────────────────────────┐
│ 2023-06-05 00:09:52.000 │ DateTime64(3, 'Asia/Istanbul') │
└─────────────────────────┴────────────────────────────────┘
```

4. Conversion de fuseaux horaires

```sql theme={null}
SELECT
toDateTime64(timestamp, 3, 'Europe/London') AS lon_time,
toDateTime64(timestamp, 3, 'Asia/Istanbul') AS istanbul_time
FROM dt64;
```

```text theme={null}
┌────────────────lon_time─┬───────────istanbul_time─┐
│ 2019-01-01 00:00:00.123 │ 2019-01-01 03:00:00.123 │
│ 2019-01-01 00:00:00.123 │ 2019-01-01 03:00:00.123 │
│ 2018-12-31 21:00:00.000 │ 2019-01-01 00:00:00.000 │
└─────────────────────────┴─────────────────────────┘
```

**Voir aussi**

* [Fonctions de conversion de type](/fr/reference/functions/regular-functions/type-conversion-functions)
* [Fonctions de manipulation des dates et heures](/fr/reference/functions/regular-functions/date-time-functions)
* [Le paramètre `date_time_input_format`](/fr/reference/settings/formats#date_time_input_format)
* [Le paramètre `date_time_output_format`](/fr/reference/settings/formats#date_time_output_format)
* [Le paramètre de configuration du serveur `timezone`](/fr/reference/settings/server-settings/settings#timezone)
* [Le paramètre `session_timezone`](/fr/reference/settings/session-settings#session_timezone)
* [Opérateurs de manipulation des dates et heures](/fr/reference/operators/index#operators-for-working-with-dates-and-times)
* [Type de données `Date`](/fr/reference/data-types/date)
* [Type de données `DateTime`](/fr/reference/data-types/datetime)
