Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Interval

Famille de types de données représentant des intervalles de temps et de dates. Il s’agit des types résultant de l’opérateur INTERVAL.

Structure :

  • Intervalle de temps sous la forme d’une valeur entière non signée.
  • Type d’intervalle.

Types d’intervalles pris en charge :

  • NANOSECOND
  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR

Pour chaque type d’intervalle, il existe un type de données distinct. Par exemple, l’intervalle DAY correspond au type de données IntervalDay :

SELECT toTypeName(INTERVAL 4 DAY)
┌─toTypeName(toIntervalDay(4))─┐
│ IntervalDay                  │
└──────────────────────────────┘

Remarques d’utilisation

Vous pouvez utiliser des valeurs de type Interval dans des opérations arithmétiques avec des valeurs de type Date et DateTime. Par exemple, vous pouvez ajouter 4 jours à l’instant actuel :

SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY
┌───current_date_time─┬─plus(now(), toIntervalDay(4))─┐
│ 2019-10-23 10:58:45 │           2019-10-27 10:58:45 │
└─────────────────────┴───────────────────────────────┘

Il est également possible d'utiliser plusieurs intervalles simultanément :

SELECT now() AS current_date_time, current_date_time + (INTERVAL 4 DAY + INTERVAL 3 HOUR)
┌───current_date_time─┬─plus(current_date_time, plus(toIntervalDay(4), toIntervalHour(3)))─┐
│ 2024-08-08 18:31:39 │                                                2024-08-12 21:31:39 │
└─────────────────────┴────────────────────────────────────────────────────────────────────┘

Et pour comparer des valeurs avec des intervalles différents :

SELECT toIntervalMicrosecond(179999999) < toIntervalMinute(3);
┌─less(toIntervalMicrosecond(179999999), toIntervalMinute(3))─┐
│                                                           1 │
└─────────────────────────────────────────────────────────────┘
SELECT toIntervalMicrosecond(3600000000) = toIntervalHour(1);
┌─equals(toIntervalMicrosecond(3600000000), toIntervalHour(1))─┐
│                                                            1 │
└──────────────────────────────────────────────────────────────┘

Intervalles de type mixte

Les intervalles de type mixte, par exemple avec plusieurs heures et plusieurs minutes, peuvent être créés à l’aide de la syntaxe INTERVAL 'value' <from_kind> TO <to_kind>. Le résultat est un tuple de deux intervalles ou plus.

Combinaisons prises en charge :

Syntaxe Format de la chaîne Exemple
YEAR TO MONTH Y-M INTERVAL '2-6' YEAR TO MONTH
DAY TO HOUR D H INTERVAL '5 12' DAY TO HOUR
DAY TO MINUTE D H:M INTERVAL '5 12:30' DAY TO MINUTE
DAY TO SECOND D H:M:S INTERVAL '5 12:30:45' DAY TO SECOND
HOUR TO MINUTE H:M INTERVAL '1:30' HOUR TO MINUTE
HOUR TO SECOND H:M:S INTERVAL '1:30:45' HOUR TO SECOND
MINUTE TO SECOND M:S INTERVAL '5:30' MINUTE TO SECOND

Les champs autres que le premier sont validés conformément à la norme SQL : MONTH 0-11, HOUR 0-23, MINUTE 0-59, SECOND 0-59.

SELECT INTERVAL '1:30' HOUR TO MINUTE;
┌─(toIntervalHour(1), toIntervalMinute(30))─┐
│ (1,30)                                     │
└────────────────────────────────────────────┘

Un signe + ou - facultatif en début de valeur s’applique à tous les composants :

SELECT INTERVAL '+1:30' HOUR TO MINUTE;
-- this is equivalent to:
-- SELECT INTERVAL '1:30' HOUR TO MINUTE;
┌─(toIntervalHour(1), toIntervalMinute(30))─┐
│ (1,30)                                     │
└────────────────────────────────────────────┘

Voir aussi

Navigation