Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggabungkan Medan Hari, Bulan dan Tahun yang Berasingan dalam MySQL untuk Melakukan Perbandingan Julat Tarikh?

Bagaimanakah Saya Boleh Menggabungkan Medan Hari, Bulan dan Tahun yang Berasingan dalam MySQL untuk Melakukan Perbandingan Julat Tarikh?

Barbara Streisand
Barbara Streisandasal
2024-12-24 11:58:18972semak imbas

How Can I Combine Separate Day, Month, and Year Fields in MySQL to Perform Date Range Comparisons?

Menggabungkan Medan Tarikh untuk Perbandingan dalam MySQL

Dalam aplikasi dengan penapis carian berasaskan tarikh, ia boleh menjadi mencabar untuk bekerja dengan skema pangkalan data yang menyimpan komponen tarikh dalam medan berasingan untuk hari, bulan dan tahun. Artikel ini menunjukkan cara untuk menggabungkan medan ini dan mencipta objek tarikh untuk perbandingan dengan julat tarikh yang ditentukan pengguna.

Pertimbangkan struktur jadual "tarikh" berikut:

CREATE TABLE `date` (
  `deposition_id` varchar(11) NOT NULL default '',
  `day` int(2) default NULL,
  `month` int(2) default NULL,
  `year` int(4) default NULL,
  PRIMARY KEY  (`deposition_id`)
);

Untuk membina tarikh daripada medan ini, MySQL menyediakan fungsi berikut:

  • MAKEDATE(): Mencipta objek DATETIME dari setahun dan bulan, dengan hari ditetapkan kepada 1.
  • DATE_ADD(): Menambahkan selang waktu tertentu (cth., bulan atau hari) pada objek DATETIME.

Untuk mencipta objek tarikh yang mewakili tarikh tertentu, langkah berikut boleh digunakan:

  1. Gunakan MAKEDATE() untuk mencipta DATETIME objek untuk hari pertama tahun tertentu:

    MAKEDATE(year, 1)
  2. Tambah bulan pada objek DATETIME menggunakan DATE_ADD():

    DATE_ADD(MAKEDATE(year, 1), INTERVAL (month)-1 MONTH)
  3. Akhir sekali, tambahkan hari pada objek DATETIME menggunakan DATE_ADD():

    DATE_ADD(..., INTERVAL (day)-1 DAY)

Dengan menggabungkan fungsi ini, objek tarikh yang lengkap boleh dibina daripada medan hari, bulan dan tahun individu. Objek tarikh ini kemudiannya boleh digunakan untuk perbandingan julat tarikh:

SELECT * FROM `date`
WHERE DATE_ADD(DATE_ADD(MAKEDATE(year, 1), INTERVAL (month)-1 MONTH), INTERVAL (day)-1 DAY)
BETWEEN '2013-01-01' AND '2014-01-01';

Pertanyaan ini akan mendapatkan semula semua rekod dalam jadual "tarikh" di mana tarikh gabungan berada dalam julat yang ditentukan. Dengan menggunakan gabungan MAKEDATE() dan DATE_ADD(), MySQL membolehkan pembangun memanipulasi dan membandingkan tarikh dengan berkesan, walaupun disimpan dalam medan berasingan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Medan Hari, Bulan dan Tahun yang Berasingan dalam MySQL untuk Melakukan Perbandingan Julat Tarikh?. 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