Skip to main content
Disposer d’une gamme complète de types de date et d’heure est essentiel pour gérer efficacement les séries temporelles, et ClickHouse répond précisément à ce besoin. Des représentations compactes de dates aux horodatages haute précision avec une exactitude à la nanoseconde, ces types sont conçus pour concilier efficacité de stockage et exigences pratiques des différentes applications de séries temporelles. Que vous travailliez avec des données financières historiques, des relevés de capteurs IoT ou des événements planifiés dans le futur, les types de date et d’heure de ClickHouse offrent la souplesse nécessaire pour couvrir divers scénarios de données temporelles. L’éventail des types pris en charge vous permet d’optimiser à la fois l’espace de stockage et les performances des requêtes tout en conservant la précision qu’exige votre cas d’usage.
  • Le type Date devrait suffire dans la plupart des cas. Ce type nécessite 2 octets pour stocker une date et limite la plage à [1970-01-01, 2149-06-06].
  • Date32 couvre une plage de dates plus large. Il nécessite 4 octets pour stocker une date et limite la plage à [1900-01-01, 2299-12-31]
  • DateTime stocke des valeurs de date et d’heure avec une précision à la seconde et une plage de [1970-01-01 00:00:00, 2106-02-07 06:28:15]. Il nécessite 4 octets par valeur.
  • Lorsqu’une précision supérieure est nécessaire, DateTime64 peut être utilisé. Il permet de stocker la date et l’heure avec une précision allant jusqu’à la nanoseconde, avec une plage de [1900-01-01 00:00:00, 2299-12-31 23:59:59.99999999]. Il nécessite 8 octets par valeur.
Créons une table qui stocke différents types de dates :
Nous pouvons utiliser la fonction now() pour renvoyer l’heure actuelle, et now64() pour l’obtenir avec la précision spécifiée par le premier argument.
Cela remplira nos colonnes avec des valeurs temporelles en fonction de leur type :

Types Time et Time64

Pour les cas où vous devez stocker des valeurs d’heure sans composante de date, ClickHouse fournit les types Time et Time64, introduits dans la version 25.6. Ils sont utiles pour représenter des horaires récurrents, des schémas quotidiens ou des situations où il est pertinent de séparer les composantes de date et d’heure.
L’utilisation de Time et Time64 nécessite d’activer le paramètre : SET enable_time_time64_type = 1;Ces types ont été introduits dans la version 25.6
Le type Time stocke les heures, les minutes et les secondes avec une précision à la seconde. Stocké en interne sous la forme d’un entier signé sur 32 bits, il prend en charge une plage de [-999:59:59, 999:59:59], ce qui autorise des valeurs supérieures à 24 heures. Cela peut être utile pour suivre le temps écoulé ou effectuer des opérations arithmétiques qui produisent des valeurs en dehors d’une seule journée. Pour une précision inférieure à la seconde, Time64 stocke l’heure avec un nombre configurable de secondes fractionnaires sous la forme d’une valeur Decimal64 signée. Il accepte un paramètre de précision (0-9) pour définir le nombre de chiffres fractionnaires. Les valeurs de précision courantes sont 3 (millisecondes), 6 (microsecondes) et 9 (nanosecondes). Ni Time ni Time64 ne prennent en charge les fuseaux horaires - ils représentent des valeurs d’heure pures, sans contexte régional. Créons une table avec des colonnes de temps :
Nous pouvons insérer des valeurs temporelles à l’aide de littéraux de chaîne ou de valeurs numériques. Pour Time, les valeurs numériques sont interprétées comme des secondes depuis 00:00:00. Pour Time64, les valeurs numériques sont interprétées comme des secondes depuis 00:00:00, la partie fractionnaire étant interprétée selon la précision de la colonne :
Les valeurs temporelles se filtrent naturellement :

Fuseaux horaires

De nombreux cas d’usage exigent également le stockage des fuseaux horaires. Nous pouvons définir le fuseau horaire comme dernier argument des types DateTime ou DateTime64 :
Après avoir défini un fuseau horaire dans notre DDL, nous pouvons désormais insérer des valeurs de temps en utilisant différents fuseaux horaires :
Et maintenant, voyons ce que contient notre table :
Dans la première ligne, nous avons inséré toutes les valeurs en utilisant le fuseau horaire America/New_York.
  • dt_1 et dt64_1 sont automatiquement convertis en Europe/Berlin à l’exécution de la requête.
  • dt_2 et dt64_2 n’avaient pas de fuseau horaire spécifié et utilisent donc le fuseau horaire local du serveur, qui est ici Europe/London.
Dans la deuxième ligne, nous avons inséré toutes les valeurs sans préciser de fuseau horaire ; le fuseau horaire local du serveur a donc été utilisé. Comme dans la première ligne, dt_1 et dt64_1 sont convertis en Europe/Berlin, tandis que dt_2 et dt64_2 utilisent le fuseau horaire local du serveur.

Fonctions de date et d’heure

ClickHouse propose également un ensemble de fonctions qui permettent de convertir entre différents types de données. Par exemple, nous pouvons utiliser toDate pour convertir une valeur DateTime en type Date :
Nous pouvons utiliser toDateTime64 pour convertir DateTime en DateTime64 :
Et nous pouvons utiliser toDateTime pour passer de Date ou DateTime64 à DateTime :
Dernière modification le 3 juillet 2026