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 │
└──────────────────────────────┘
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(3600000000) = toIntervalHour(1);
┌─less(toIntervalMicrosecond(179999999), toIntervalMinute(3))─┐
│ 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) │
└────────────────────────────────────────────┘
Dernière modification le 25 juin 2026