Maison >base de données >tutoriel mysql >Comment puis-je interroger efficacement les heures de bureau dans PostgreSQL à l'aide de « tsrange » ?
La question d'origine illustre l'utilisation de SQL pour interroger des enregistrements qui correspondent à une plage d'heures de travail spécifique dans une application ActiveRecord (RoR). La requête utilise des conditions complexes pour comparer le moment actuel avec la valeur stockée. La question soulève la question de savoir si cela est possible en convertissant la valeur temporelle en un type de date et en laissant PostgreSQL gérer la comparaison.
Pour résoudre ce problème, il est recommandé d'utiliser le type de données tsrange (plage de temps) de PostgreSQL pour stocker les heures d'ouverture. tsrange vous permet de stocker les heures ouvrées exprimées sous forme de périodes, et PostgreSQL fournit des fonctions et des opérateurs intégrés pour manipuler ces plages.
Pour ce faire, vous devez apporter des modifications de schéma à la table existante :
ALTER TABLE hours_of_operations ALTER COLUMN opens_on TYPE TIMESTAMP ALTER COLUMN closes_on TYPE TIMESTAMP ALTER COLUMN opens_at TYPE TIME ALTER COLUMN closes_at TYPE TIME
Créez une nouvelle colonne hours pour stocker la valeur tsrange :
ALTER TABLE hours_of_operations ADD COLUMN hours TSrange
Ensuite, utilisez l'instruction suivante pour mettre à jour les heures Colonne :
UPDATE hours_of_operations SET hours = tsrange(opens_on || ' ' || opens_at, closes_on || ' ' || closes_at)
Après avoir mis à jour la structure de la table, vous pouvez écrire une requête SQL plus concise et efficace pour répondre aux exigences de la question d'origine :
SELECT * FROM hours_of_operations WHERE current_timestamp @> hours
Cette requête utilise l'opérateur @> pour vérifier si l'heure actuelle se situe dans la plage d'heures stockée. Si vous devez prendre en compte des problèmes de fuseau horaire, utilisez la fonction d'heure appropriée pour convertir l'heure actuelle en UTC ou en un autre fuseau horaire souhaité.
Les avantages de l'utilisation de tsrange incluent :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!