Cara Mengabaikan Tahun dalam Matematik Tarikh
Masalah:
Pilih tarikh yang mempunyai ulang tahun dalam 14 hari akan datang, tidak termasuk tahun komponen.
Pertanyaan Asal:
SELECT * FROM events WHERE EXTRACT(month FROM "date") = 3 AND EXTRACT(day FROM "date") < EXTRACT(day FROM "date") + 14
Isu:
Berbulan-bulan selesai, jadi pertanyaan ini mungkin terlepas ulang tahun yang berlaku selepas akhir arus bulan.
Penyelesaian:
1. Menggunakan Siri Jana:
SELECT * FROM events WHERE (date > '2013-03-01' AND date < '2013-04-01')
Pertanyaan ini mengabaikan tahun dengan menyatakan julat tarikh secara eksplisit. Walau bagaimanapun, ia tidak fleksibel untuk tempoh ulang tahun yang berbeza.
2. Menggunakan Matematik Tarikh:
SELECT event_date FROM event_table WHERE (event_date >= CURRENT_DATE AND event_date <= CURRENT_DATE + INTERVAL '14 days');
Pertanyaan ini menggunakan matematik tarikh untuk mengira julat tarikh ulang tahun. Ia lebih fleksibel tetapi mungkin berprestasi lebih perlahan untuk meja besar.
3. Menggunakan Fungsi (Disyorkan):
CREATE FUNCTION get_anniversary(date date) RETURNS date AS BEGIN RETURN date PARTITION BY YEAR; END; SELECT event_date FROM event_table WHERE get_anniversary(event_date) >= CURRENT_DATE AND get_anniversary(event_date) <= CURRENT_DATE + INTERVAL '14 days';
Pertanyaan ini menggunakan fungsi untuk mengalih keluar tahun daripada tarikh. Ia mencipta partition untuk setiap tahun unik, menjadikannya lebih pantas untuk meja besar.
Atas ialah kandungan terperinci Bagaimana Mencari Ulang Tahun Dengan Cekap Dalam 14 Hari Akan Datang, Mengabaikan Tahun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!