Dans PostgreSQL, vous pouvez utiliser le OVERLAPS
l'opérateur pour tester les périodes de temps qui se chevauchent.
La fonction renvoie true lorsque deux périodes (définies par leurs extrémités) se chevauchent et false lorsqu'elles ne se chevauchent pas.
Syntaxe
Il peut être utilisé des deux manières suivantes :
(start1, end1) OVERLAPS (start2, end2)
(start1, length1) OVERLAPS (start2, length2)
En d'autres termes, vous fournissez une date/heure de début, puis vous avez la possibilité de fournir une date/heure de fin ou une durée.
Plus précisément, les points de terminaison peuvent être spécifiés sous forme de paires de dates, d'heures ou d'horodatages ; ou sous la forme d'une date, d'une heure ou d'un horodatage suivi d'un intervalle.
Lorsqu'une paire de valeurs est fournie, le début ou la fin peut être écrit en premier ; OVERLAPS
prend automatiquement la valeur la plus ancienne de la paire comme valeur de départ.
Exemple
Voici un exemple de base pour illustrer.
SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
(date '2022-02-09', date '2022-03-10');
Résultat :
True
Le résultat est vrai car les deux périodes se chevauchent.
Le voici à nouveau, mais cette fois, je modifie les périodes de temps pour qu'elles ne se chevauchent pas.
SELECT (date '2022-01-09', date '2022-02-08') OVERLAPS
(date '2022-02-09', date '2022-03-08');
Résultat :
False
Points finaux communs
Il est important de noter que chaque période est considérée comme représentant l'intervalle semi-ouvert start
<=
time
<
end
, sauf si start
et end
sont égaux, auquel cas il représente cet instant unique. Cela signifie que deux périodes de temps avec seulement un point de terminaison en commun ne se chevauchent pas.
Dans l'exemple suivant, la deuxième période commence le même jour que la première période se termine.
SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
(date '2022-02-10', date '2022-03-10');
Résultat :
False
Cependant, nous obtenons un résultat différent si les deux extrémités de la première période sont identiques :
SELECT (date '2022-01-09', date '2022-01-09') OVERLAPS
(date '2022-01-09', date '2022-02-10');
Résultat :
True
Intervalles
Comme mentionné, le deuxième point final peut être un intervalle.
SELECT (date '2022-01-09', interval '32 days') OVERLAPS
(date '2022-02-09', date '2022-03-10');
Résultat :
True