Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menyoal Waktu Perniagaan dengan Cekap dalam PostgreSQL Menggunakan `tsrange`?

Bagaimanakah Saya Boleh Menyoal Waktu Perniagaan dengan Cekap dalam PostgreSQL Menggunakan `tsrange`?

Linda Hamilton
Linda Hamiltonasal
2025-01-04 14:26:38256semak imbas

How Can I Efficiently Query Business Hours in PostgreSQL Using `tsrange`?

Melaksanakan pertanyaan waktu perniagaan ini dalam PostgreSQL

Soalan asal menggambarkan menggunakan SQL untuk membuat pertanyaan bagi rekod yang memenuhi julat waktu perniagaan tertentu dalam aplikasi ActiveRecord (RoR). Pertanyaan menggunakan keadaan kompleks untuk membandingkan titik masa semasa dengan nilai yang disimpan. Persoalannya menimbulkan persoalan sama ada ini boleh dilakukan dengan menukar nilai masa kepada beberapa jenis tarikh dan membiarkan PostgreSQL mengendalikan perbandingan.

Amalan terbaik: Gunakan jenis tsrange

Untuk menyelesaikan masalah ini, adalah disyorkan untuk menggunakan jenis data tsrange (julat masa) PostgreSQL untuk menyimpan waktu perniagaan. tsrange membolehkan anda menyimpan waktu perniagaan yang dinyatakan sebagai tempoh masa, dan PostgreSQL menyediakan fungsi dan pengendali terbina dalam untuk memanipulasi julat ini.

Perubahan skema

Untuk melakukan ini, anda perlu membuat perubahan skema pada jadual sedia ada:

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

Buat jam lajur baharu untuk menyimpan nilai tsrange:

ALTER TABLE hours_of_operations
ADD COLUMN hours TSrange

Kemudian gunakan pernyataan berikut untuk mengemas kini waktu perniagaan Lajur:

UPDATE hours_of_operations
SET hours = tsrange(opens_on || ' ' || opens_at, closes_on || ' ' || closes_at)

Keadaan pertanyaan

Selepas mengemas kini struktur jadual, anda boleh menulis pertanyaan SQL yang lebih ringkas dan cekap untuk memenuhi keperluan soalan asal:

SELECT *
FROM hours_of_operations
WHERE current_timestamp @> hours

Pertanyaan ini menggunakan pengendali @> untuk menyemak sama ada titik masa semasa berada dalam julat jam yang disimpan. Jika anda perlu mempertimbangkan isu zon waktu, gunakan fungsi masa yang sesuai untuk menukar masa semasa kepada UTC atau zon waktu lain yang dikehendaki.

Kelebihan

Kelebihan menggunakan tsrange termasuk:

  • Pertanyaan adalah ringkas dan mudah difahami.
  • Elakkan logik perbandingan yang kompleks dan tingkatkan prestasi.
  • Menyokong waktu perniagaan yang kompleks, seperti waktu perniagaan yang menjangkau sehari atau kitaran pakej.
  • Boleh digunakan dengan fungsi dan indeks berkaitan masa lain yang disediakan oleh PostgreSQL.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal Waktu Perniagaan dengan Cekap dalam PostgreSQL Menggunakan `tsrange`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn