Heim >Datenbank >MySQL-Tutorial >Wie kann ich Geschäftszeiten in PostgreSQL mithilfe von „tsrange' effizient abfragen?
Die ursprüngliche Frage veranschaulicht die Verwendung von SQL zum Abfragen von Datensätzen, die einem bestimmten Geschäftszeitenbereich in einer ActiveRecord (RoR)-Anwendung entsprechen. Die Abfrage verwendet komplexe Bedingungen, um den aktuellen Zeitpunkt mit dem gespeicherten Wert zu vergleichen. Die Frage wirft die Frage auf, ob dies möglich ist, indem der Zeitwert in einen Datumstyp konvertiert und PostgreSQL den Vergleich übernehmen lässt.
Um dieses Problem zu lösen, wird empfohlen, den Datentyp tsrange (Zeitbereich) von PostgreSQL zum Speichern der Geschäftszeiten zu verwenden. Mit tsrange können Sie Geschäftszeiten in Form von Zeiträumen speichern, und PostgreSQL bietet integrierte Funktionen und Operatoren zum Bearbeiten dieser Bereiche.
Dazu müssen Sie Schemaänderungen an der vorhandenen Tabelle vornehmen:
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
Erstellen Sie eine neue Spalte „Stunden“, um den tsrange-Wert zu speichern:
ALTER TABLE hours_of_operations ADD COLUMN hours TSrange
Verwenden Sie dann die folgende Anweisung, um die Stunden zu aktualisieren Spalte:
UPDATE hours_of_operations SET hours = tsrange(opens_on || ' ' || opens_at, closes_on || ' ' || closes_at)
Nachdem Sie die Tabellenstruktur aktualisiert haben, können Sie eine präzisere und effizientere SQL-Abfrage schreiben, um die Anforderungen der ursprünglichen Frage zu erfüllen:
SELECT * FROM hours_of_operations WHERE current_timestamp @> hours
Diese Abfrage verwendet den @>-Operator, um zu prüfen, ob der aktuelle Zeitpunkt innerhalb des gespeicherten Stundenbereichs liegt. Wenn Sie Zeitzonenprobleme berücksichtigen müssen, verwenden Sie die entsprechende Zeitfunktion, um die aktuelle Zeit in UTC oder eine andere gewünschte Zeitzone umzuwandeln.
Zu den Vorteilen der Verwendung von tsrange gehören:
Das obige ist der detaillierte Inhalt vonWie kann ich Geschäftszeiten in PostgreSQL mithilfe von „tsrange' effizient abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!