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
Lepaskan: 2025-01-04 14:26:38
asal
222 orang telah melayarinya

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
Salin selepas log masuk

Buat jam lajur baharu untuk menyimpan nilai tsrange:

ALTER TABLE hours_of_operations
ADD COLUMN hours TSrange
Salin selepas log masuk

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)
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan